Що означає пункт SQL “GROUP BY 1”?


202

Хто - то прислав мені запит SQL , де GROUP BYстановище складалося з заяви: GROUP BY 1.

Це повинно бути помилково помилково? У жодному стовпці не надається псевдонім 1. Що це може означати? Чи правильно я вважаю, що це має бути помилка друку?


6
Це не помилка, це перша колонка вашого набору результатів
Ламак

9
Зауважте, що цей синтаксис не є портативним. Він поводитиметься інакше на базах даних, крім mysql. Наприклад, в Oracle це трактується як константа.
Рассел Рід

2
@RussellReed Так. на жаль (оскільки використання псевдоніма іноді дуже корисно) ansi sql не дозволяє групувати по порядку порядкових стовпців. Причина в тому, що група відбувається перед проекцією. Але потім .. що, коли ми маємо групування виразів з десятками рядків .. ми закінчуємо .. mutiples з десятків рядків у остаточному операторі sql.
javadba

Відповіді:


231

Це означає групувати за першим стовпцем незалежно від того, як він називається. Ви можете зробити те ж саме і з ORDER BY.


74
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

Вище запит GROUP BY 1посилається на те, first column in select statementщо є account_id.

Ви також можете вказати в ORDER BY.

Примітка. Число в порядку ORDER BY і GROUP BY завжди починається з 1, а не з 0.


25

Крім групування за назвою поля, ви також можете групуватись за порядковим або позиційним полем у таблиці. 1 відповідає першому полі (незалежно від назви), 2 - другому тощо.

Це, як правило, нераціонально, якщо ви групуєте щось конкретне, оскільки структура таблиці / перегляду може змінюватися. Крім того, може бути важко швидко зрозуміти, що робить ваш запит SQL, якщо ви не запам'ятали поля таблиці.

Якщо ви повертаєте унікальний набір або швидко здійснюєте тимчасовий пошук, це хороший скорочений синтаксис для зменшення набору тексту. Якщо ви плануєте запустити запит ще раз у якийсь момент, я рекомендую замінити такі, щоб уникнути майбутньої плутанини та несподіваних ускладнень (через зміни схеми).


10
+1 для "не робіть цього", і я додаю, що найкраща причина уникати цього - це те, що він не читається.
Юк


5

Це означає, що група sql за першим стовпцем у вашому пункті вибору, ми завжди використовуємо це GROUP BY 1разом з ORDER BY 1, крім того, ви також можете використовувати так GROUP BY 1,2,3.., звичайно, це нам зручно, але вам потрібно звернути увагу на цю умову, результат може бути не таким, який ви хочу, якщо хтось змінив вибрані стовпці, і це не візуалізується


4

Вона згрупується за позицією стовпця, який ви ставите після групи за пунктом.

наприклад, якщо ви запустите " SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1", він згрупується по SALESMAN_NAME.

Один ризик зробити це, якщо ви запустите " Select *", і ви чомусь відтворите таблицю з стовпцями в іншому порядку, це дасть вам інший результат, ніж ви очікували.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.