Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом / 13 сообщений из 13, страница 1 из 1
22.03.2005, 19:17
    #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
22.03.2005, 19:35
    #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
22.03.2005, 19:38
    #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
23.03.2005, 10:24
    #32975386
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом
выполнял запрос?

ERROR: позапрос во FROM не может ссылаться на другие отношения на том же уровне запроса
...
Рейтинг: 0 / 0
23.03.2005, 11:41
    #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
23.03.2005, 12:39
    #32975901
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом
ERROR: more than one row returned by a subquery used as an expression

p.s. я типа тебе за места посгреса, да? :)
...
Рейтинг: 0 / 0
23.03.2005, 12:52
    #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
23.03.2005, 13:47
    #32976113
Niemi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом
KREDTi cho v SQL vobche ne sechosh
а ты сделай поиск в форуме по имени пользователя и узнаешь :))
...
Рейтинг: 0 / 0
23.03.2005, 13:49
    #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
23.03.2005, 13:54
    #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
24.03.2005, 14:01
    #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
24.03.2005, 15:23
    #32978892
KRED
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите с запросом
pliz pokagi plani oboich zaprosov !?
...
Рейтинг: 0 / 0
24.03.2005, 18:34
    #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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / помогите с запросом / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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