|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Столкнулся с интересным поведением GROUP BY - раньше такого не замечал, хотя фича, похоже, не новая: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Специально перечитал раздел справки по group by, но не нашел никаких упоминаний подобного поведения. Кто-нибудь в курсе, почему оно именно так работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:30 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
http://msdn.microsoft.com/ru-ru/library/ms177673(v=sql.100).aspx Строки, которые не соответствуют условиям в предложении WHERE, удаляются до выполнения любых операций группирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:38 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Все логично. Группировка пустого набора всегда была пустым набором. Но при этом на пустом наборе можно считать агрегаты по всему набору. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:40 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
У вас тут два запроса эквивалентных, которые возвращают один и тот же результат. Что за " GROUP BY работает как фильтр"? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:44 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
a_voroninУ вас тут два запроса эквивалентных, которые возвращают один и тот же результат. Разные результаты - в одном есть запись, а в другом нет ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:45 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
a_voroninУ вас тут два запроса эквивалентных, которые возвращают один и тот же результат. Что за " GROUP BY работает как фильтр"? Совсем не эквивалентных. Результат разный. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:46 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
iap, Гавриленко Сергей Алексеевич, Вы пробовали выполнять код из примера? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:55 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Ennor TiegaelВы пробовали выполнять код из примера? Пробовали Все просто group by начнет вычисление агрегатов только при наличии групп Т.е. нет групп - нет вызова агрегатов, нет вызова агрегатов - нет реузльтата ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 18:57 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Ennor Tiegaeliap, Гавриленко Сергей Алексеевич, Вы пробовали выполнять код из примера?Пробовали. А вы пробовали понять, что я ответил? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 19:15 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
кстати, этот прием может пригодиться при выборке единственного значения из набора, когда надо сбрасывать переменную в NULL, если ничего не нашлось. Код: sql 1. 2. 3. 4. 5. 6. 7.
хотя можно и просто set @objname = NULL перед выборкой :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 19:32 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Гавриленко Сергей Алексеевич, Разумеется, до сих пор пытаюсь. Кажется, даже начало получаться. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 19:56 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Ennor TiegaelГавриленко Сергей Алексеевич, Разумеется, до сих пор пытаюсь. Кажется, даже начало получаться. Спасибо. Если по делу, что может вам надо написать Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 20:11 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Ennor Tiegaeliap, Гавриленко Сергей Алексеевич, Вы пробовали выполнять код из примера?Да! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 20:31 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
iapEnnor Tiegaeliap, Гавриленко Сергей Алексеевич, Вы пробовали выполнять код из примера?Да!Пытался найти что-то подходящее в документации. Помню, на форуме были обсуждения в какой-то теме применительно к COUNT(*). Если GROUP BY есть, то для пустого DataSet не возвращается ни одной строки, а если нет, то возвращается 0. Но я чего-то эту тему быстро не нашёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 20:35 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
Это называется "скалярные агрегаты" http://blogs.msdn.com/b/craigfr/archive/2006/09/06/743116.aspx In this post, I’m going to focus on “scalar aggregates.” Scalar aggregates are queries with aggregate functions in the select list and no GROUP BY clause. Scalar aggregates always return a single row. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2014, 22:16 |
|
GROUP BY работает как фильтр
|
|||
---|---|---|---|
#18+
invm, То, что агрегаты возвращают одну строку, как раз ожидаемо. Неожиданной была ситуация, когда они перестают это делать. И вот об этом у Фридмана ни слова - он рассматривает более низкий, физический, уровень, а это в данном случае как раз иррелевантно (ибо неважно, будет это Stream или Hash Aggregate - результат запроса будет одинаковый). Может, конечно, это всем настолько очевидно, что никто даже не видит смысла в упоминании такой возможности, и это только я один такой темный. Но, имхо, как минимум в справке стоило о такой возможности упомянуть. Простейший пример - апдейт таблицы агрегатом, получаемым из APPLY. В зависимости от формулировки, CROSS может внезапно превратиться в OUTER и наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2014, 10:07 |
|
|
start [/forum/topic.php?fid=46&msg=38773814&tid=1700403]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 276ms |
0 / 0 |