powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом
13 сообщений из 13, страница 1 из 1
помогите с запросом
    #32974640
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
видимо я все таки торможу... стандартная задача но чет не выходит каменный цветок

таблица
create table aaa{
domain varchar,
server varchar,
}


domain ~ 10000 штук;
server ~ 20 штук;

вобщем записей много , разных server мало, а domain вообще uniq,так же как и (domain,server) тоже uniq.

требуется выбрать по N (не более N ) любых доменов с каждого сервера N>1(т.к при N=1 это решается дистинктом)

посгрес 7.4 (подчеркиваю именно PG7.х т.к в 8.0 это решается без проблем через generate_series)

интересует именно решение через SQL запрос (т.к. хранимыми процедурами и всякими внешними языками это делается достаточно просто)
...
Рейтинг: 0 / 0
помогите с запросом
    #32974687
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearвидимо я все таки торможу... стандартная задача но чет не выходит каменный цветок

таблица
create table aaa{
domain varchar,
server varchar,
}


domain ~ 10000 штук;
server ~ 20 штук;

вобщем записей много , разных server мало, а domain вообще uniq,так же как и (domain,server) тоже uniq.

требуется выбрать по N (не более N ) любых доменов с каждого сервера N>1(т.к при N=1 это решается дистинктом)

посгрес 7.4 (подчеркиваю именно PG7.х т.к в 8.0 это решается без проблем через generate_series)

интересует именно решение через SQL запрос (т.к. хранимыми процедурами и всякими внешними языками это делается достаточно просто)


select a1.server,a3.domain from aaa a1 , (select a2.domain from aaa a2 where a1.server=a2.server limit 20 ) a3
...
Рейтинг: 0 / 0
помогите с запросом
    #32974691
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KRED
select a1.server,a3.domain from aaa a1 , (select a2.domain from aaa a2 where a1.server=a2.server limit 20 ) a3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select 
   a1.server,
   a3.domain 
from 
   aaa  a1 , 
   (select * 
    from aaa a2 
    where 
       a1.server=a2.server 
    limit  20  
   ) a3 
where 
   a1.server=a3.server
...
Рейтинг: 0 / 0
помогите с запросом
    #32975386
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выполнял запрос?

ERROR: позапрос во FROM не может ссылаться на другие отношения на том же уровне запроса
...
Рейтинг: 0 / 0
помогите с запросом
    #32975689
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearвыполнял запрос?

ERROR: позапрос во FROM не может ссылаться на другие отношения на том же уровне запроса

net ... inacheb ne napisalbi ... netu u menya PG 7.4 ... :-) ya vot prosnulsya i ponyal chto on vcoravno ne pashet .... tak chto ne rasstraivaisya.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select 
   a1.server,
   a1.domain
from 
   aaa  a1 
where 
   a1.domain = (select domain from aaa a2 where a1.server=a2.server  order by  1  limit  20 )
...
Рейтинг: 0 / 0
помогите с запросом
    #32975901
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ERROR: more than one row returned by a subquery used as an expression

p.s. я типа тебе за места посгреса, да? :)
...
Рейтинг: 0 / 0
помогите с запросом
    #32975947
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearERROR: more than one row returned by a subquery used as an expression

p.s. я типа тебе за места посгреса, да? :)

:-)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select 
   a1.server,
   a1.domain
from 
   aaa  a1 
where 
   a1.domain in (select domain from aaa a2 where a1.server=a2.server  order by  1  limit  20 )

Ti cho v SQL vobche ne sechosh
...
Рейтинг: 0 / 0
помогите с запросом
    #32976113
Фотография Niemi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KREDTi cho v SQL vobche ne sechosh
а ты сделай поиск в форуме по имени пользователя и узнаешь :))
...
Рейтинг: 0 / 0
помогите с запросом
    #32976121
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
секу немного ... тока переклинело видимо меня.. это я еще в первом сообщении написал :)

кстати есть еще вот такое решение без использования лимитов:
SELECT server AS s, domain AS d FROM table WHERE (SELECT count(*) FROM table WHERE server = s AND domain < d) <= 10;
...
Рейтинг: 0 / 0
помогите с запросом
    #32976139
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearсеку немного ... тока переклинело видимо меня.. это я еще в первом сообщении написал :)

кстати есть еще вот такое решение без использования лимитов:
SELECT server AS s, domain AS d FROM table WHERE (SELECT count(*) FROM table WHERE server = s AND domain < d) <= 10;

togda viberutsya tolko te servera u kogo domainov menshe 11 ....

PS a pri chom tyt domain < d ? domain ved dolgen bit "VARCHAR" !!!
...
Рейтинг: 0 / 0
помогите с запросом
    #32978574
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>a pri chom tyt domain < d ? domain ved dolgen bit "VARCHAR" !!!

а что ты тогда под сортировкой строк(varchar'ов) подрузомеваешь?
т.е ты хочешь сказать что варчары можно отсортировать, а сравнит на < нельзя?
и кто из нас "не секет в sql"? ;)


>togda viberutsya tolko te servera u kogo domainov menshe 11 ....

нет выберется кораз то что надо..


>SELECT server AS s, domain AS d FROM table WHERE (SELECT count(*) FROM table WHERE server = s AND domain < d) <= 10;

в переводе с SQL на русский:
выводим домен если (количество доменов с именем меньшим чем у первого в пределах одноге сервера) <=10

побочный эфект этого запроса ,то что получатся первые N доменов из отсортированного списка доменов в пределах одноге сервера
...
Рейтинг: 0 / 0
помогите с запросом
    #32978892
KRED
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pliz pokagi plani oboich zaprosov !?
...
Рейтинг: 0 / 0
помогите с запросом
    #32979477
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
позалуста...только оно все равно было для спортивного интереса.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
select count(*) from public.aaa
 28072 
select count(distinct server) from public.aaa
 20 
select count(distinct domain) from public.aaa
 28072 


SELECT a1.server,a1.domain FROM public.aaa  as a1 WHERE (SELECT count(*) FROM public.aaa  as a2 WHERE a2.server = a1.server AND a2.domain < a1.domain) <=  10 ;

Seq Scan on aaa a1  (cost= 0 . 00 .. 4810608 . 82  rows= 9358  width= 24 )
  Filter: ((subplan) <=  10 )
  SubPlan
    ->  Aggregate  (cost= 171 . 34 .. 171 . 34  rows= 1  width= 0 )
          ->  Index Scan using do_serv on aaa a2  (cost= 0 . 00 .. 170 . 16  rows= 468  width= 0 )
                Index Cond: ((("domain")::text < ($ 1 )::text) AND ((server)::text = ($ 0 )::text))
---------------- ANALYZE
Seq Scan on aaa a1  (cost= 0 . 00 .. 4810608 . 82  rows= 9358  width= 24 ) (actual time= 0 . 420 .. 916731 . 212  rows= 220  loops= 1 )
  Filter: ((subplan) <=  10 )
  SubPlan
    ->  Aggregate  (cost= 171 . 34 .. 171 . 34  rows= 1  width= 0 ) (actual time= 32 . 617 .. 32 . 622  rows= 1  loops= 28072 )
          ->  Index Scan using do_serv on aaa a2  (cost= 0 . 00 .. 170 . 16  rows= 468  width= 0 ) (actual time= 0 . 077 .. 27 . 746  rows= 752  loops= 28072 )
                Index Cond: ((("domain")::text < ($ 1 )::text) AND ((server)::text = ($ 0 )::text))
Total runtime:  916732 . 674  ms

---916732.674 ms но я все-таки дождался :)



SELECT a1.server,a1.domain FROM public.aaa  a1 WHERE a1.domain in (SELECT domain FROM public.aaa a2 WHERE a1.server=a2.server  ORDER BY  1  LIMIT  20 )

Seq Scan on aaa a1  (cost= 0 . 00 .. 205017 . 83  rows= 14036  width= 24 )
  Filter: (subplan)
  SubPlan
    ->  Limit  (cost= 0 . 00 .. 14 . 50  rows= 20  width= 17 )
          ->  Index Scan using do_serv on aaa a2  (cost= 0 . 00 .. 1017 . 69  rows= 1404  width= 17 )
                Filter: (($ 0 )::text = (server)::text)
---------------- ANALYZE
Seq Scan on aaa a1  (cost= 0 . 00 .. 205017 . 83  rows= 14036  width= 24 ) (actual time= 0 . 112 .. 61113 . 139  rows= 400  loops= 1 )
  Filter: (subplan)
  SubPlan
    ->  Limit  (cost= 0 . 00 .. 14 . 50  rows= 20  width= 17 ) (actual time= 0 . 141 .. 2 . 041  rows= 20  loops= 28072 )
          ->  Index Scan using do_serv on aaa a2  (cost= 0 . 00 .. 1017 . 69  rows= 1404  width= 17 ) (actual time= 0 . 128 .. 1 . 823  rows= 20  loops= 28072 )
                Filter: (($ 0 )::text = (server)::text)
Total runtime:  61115 . 507  ms

...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]