![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GROUP BY
Climber © (2006-09-28 21:10:00)Проштудировал хэлп. Вопрос встал острее =) Сабжевая функция ведь выдаст записи с уникальным SS.
select ss,count(ss)
from base
group by ss
having count(ss)>10
А мне необходимы ВСЕ записи базы base, в которых присутствует ss, который в базе встречается > 10 раз.
При том, что в select нужно еще поля добавлять и, соответственно, добавлять их в GROUP BY, после чего кол-во выданных запросом записей еще резко сокращается.
Я чего-то не дочитал?
evvcom (2006-09-29 14:53:00) [21]> [17] Fay © (29.09.06 14:49)
Причем, эти in все равно как join сервером воспримутся (в данном случае). Не лучше ли сразу явно join написать?
Fay (2006-09-29 14:49:00) [22]2 evvcom © (29.09.06 14:43) [15]
> не знаю, как в других СУБД и в стандарте, а оракл позволяет
> where (fld1, fld2) in (select <2 поля> FROM ...)
Знаю и помню как меня удивило это знание 8)
Однако, такой IN не подходит для сабжа.
Fay (2006-09-29 14:47:00) [23]2 evvcom © (29.09.06 14:43) [15]
> В ORACLE (до 9) нет with (AFAIK)
Не проверял (не было возможности), но на sql.ru один мембер утверждал, что с было и в семёрке.
evvcom (2006-09-29 14:43:00) [24]> [7] Fay © (29.09.06 11:34)
> Т.о. решение не противоречит постановке
Ну это верно :)
> WITH - стандартный SQL
Возможно, давно не открывал стандарты. Но реальные сервера поддерживают далеко не всё, что описано в стандартах.В частности with поддерживают раз, два и обчелся серверов-то.
> В ORACLE (до 9) нет join.
inner join - стандартный SQL
В ORACLE (до 9) нет with (AFAIK)
> [8] ЮЮ © (29.09.06 11:49)
> Потому, наверное, что синтаксис, ИМХО
> in (select <одно поле> FROM ...),
не знаю, как в других СУБД и в стандарте, а оракл позволяет
where (fld1, fld2) in (select <2 поля> FROM ...)
Fay (2006-09-29 13:57:00) [25]2 Johnmen © (29.09.06 13:20) [13]
> Можно ссылку?
У меня нет ссылки на стандарт, но у разработчиков Oracle и Postgre SQL есть 8). Во всяком случае, они таких (ниже) ссылок могу привести навалом.
http://www.oracle-training.cc/t_oracle_with_sql.htm
Johnmen (2006-09-29 13:20:00) [26]
> Fay © (29.09.06 11:34) [7]
> WITH - стандартный SQL
Можно ссылку?
Fay (2006-09-29 12:09:00) [27]2 ЮЮ © (29.09.06 12:06) [11]
> Я в таком случае пишу
Думаю, мы оба понимаем, что на стандарт это не влияет
ЮЮ (2006-09-29 12:06:00) [28]
> select NAME from animals group by NAME
Я в таком случае пишу
select DISTINCTNAME from animals
Fay (2006-09-29 12:01:00) [29]2 ЮЮ © (29.09.06 11:49) [8]
> На paradox-е пробовать неохота
select NAME from animals group by NAME
Fay (2006-09-29 11:59:00) [30]2 ЮЮ © (29.09.06 11:49) [8]
> а запрос с группировкой предполагает как минимум 2
Чё, серьёзно?
ЮЮ (2006-09-29 11:49:00) [31]Почему не in (select ...)
Потому, наверное, что синтаксис, ИМХО
in (select <одно поле> FROM ...), а запрос с группировкой предполагает как минимум 2
Хотя, на MS SQL сработало и без агрегатной функции в Select, а лишь в Having
На paradox-е пробовать неохота
Fay (2006-09-29 11:34:00) [32]2 Desdechado
> Это для какой?
ХЗ
2 evvcom
> Не вижу упоминания СУБД в [0]
Я тоже не вижу.
Т.о. решение не противоречит постановке.
> возможность написать стандартный SQL
WITH - стандартный SQL
> Зачем здесь with?
Зачем здесь inner join? Почему не in (select ...) ? В ORACLE (до 9) нет join.
Desdechado (2006-09-29 11:17:00) [33]> Для СУБД афтара подходит только with
Это для какой?
evvcom (2006-09-29 11:14:00) [34]> [4] Fay © (29.09.06 11:09)
> Для СУБД афтара
Что-то у меня со зрением? Не вижу упоминания СУБД в [0]. Если есть with, то наверняка подойдет и
select B.*
from base B
inner join (select ss from base group by ss having count(*) > 10) Q
on B.ss = Q.ss
Зачем здесь with?
Fay (2006-09-29 11:09:00) [35]2 evvcom © (29.09.06 8:23) [3]
> Есть возможность написать стандартный SQL, пиши
Для СУБД афтара подходит только with
evvcom (2006-09-29 08:23:00) [36]> [2] Fay © (28.09.06 23:31)
А with то здесь зачем? Даже для оракла. Есть возможность написать стандартный SQL, пиши, если нет или оптимальнее нестандарт, тогда уж и with, и прочие вкусности. Здесь же он не нужен.
Fay (2006-09-28 23:31:00) [37]
with Q as (select ss from base group by ss having count(*) > 10)
select B.*
from base B, Q
where B.ss = Q.ss
Anatoly Podgoretsky (2006-09-28 21:23:00) [38]В таком случае какой GROUP BY