Хто - то прислав мені запит SQL , де GROUP BY
становище складалося з заяви: GROUP BY 1
.
Це повинно бути помилково помилково? У жодному стовпці не надається псевдонім 1. Що це може означати? Чи правильно я вважаю, що це має бути помилка друку?
Хто - то прислав мені запит SQL , де GROUP BY
становище складалося з заяви: GROUP BY 1
.
Це повинно бути помилково помилково? У жодному стовпці не надається псевдонім 1. Що це може означати? Чи правильно я вважаю, що це має бути помилка друку?
Відповіді:
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.
Крім групування за назвою поля, ви також можете групуватись за порядковим або позиційним полем у таблиці. 1 відповідає першому полі (незалежно від назви), 2 - другому тощо.
Це, як правило, нераціонально, якщо ви групуєте щось конкретне, оскільки структура таблиці / перегляду може змінюватися. Крім того, може бути важко швидко зрозуміти, що робить ваш запит SQL, якщо ви не запам'ятали поля таблиці.
Якщо ви повертаєте унікальний набір або швидко здійснюєте тимчасовий пошук, це хороший скорочений синтаксис для зменшення набору тексту. Якщо ви плануєте запустити запит ще раз у якийсь момент, я рекомендую замінити такі, щоб уникнути майбутньої плутанини та несподіваних ускладнень (через зміни схеми).
Це означає, що група sql за першим стовпцем у вашому пункті вибору, ми завжди використовуємо це GROUP BY 1
разом з ORDER BY 1
, крім того, ви також можете використовувати так GROUP BY 1,2,3..
, звичайно, це нам зручно, але вам потрібно звернути увагу на цю умову, результат може бути не таким, який ви хочу, якщо хтось змінив вибрані стовпці, і це не візуалізується
Вона згрупується за позицією стовпця, який ви ставите після групи за пунктом.
наприклад, якщо ви запустите " SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
", він згрупується по SALESMAN_NAME
.
Один ризик зробити це, якщо ви запустите " Select *
", і ви чомусь відтворите таблицю з стовпцями в іншому порядку, це дасть вам інший результат, ніж ви очікували.