Что означает предложение SQL «GROUP BY 1»? - PullRequest
162 голосов
/ 12 сентября 2011

Кто-то отправил мне SQL-запрос, в котором предложение GROUP BY состояло из инструкции: GROUP BY 1.

Это должно быть опечатка, верно?В столбце нет псевдонима 1. Что это может означать?Правильно ли я предполагаю, что это опечатка?

Ответы [ 6 ]

188 голосов
/ 12 сентября 2011

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

59 голосов
/ 12 сентября 2011
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.

20 голосов
/ 12 сентября 2011

Помимо группировки по имени поля, вы также можете группировать по порядковому номеру или положению поля в таблице. 1 соответствует первому полю (независимо от имени), 2 - второе и т. Д.

Это обычно не рекомендуется, если вы группируете что-то конкретное, поскольку структура таблицы / представления может измениться. Кроме того, может быть сложно быстро понять, что делает ваш SQL-запрос, если вы не запомнили поля таблицы.

Если вы возвращаете уникальный набор или быстро выполняете временный поиск, это хороший сокращенный синтаксис для сокращения набора текста. Если вы планируете снова выполнить запрос в какой-то момент, я бы рекомендовал заменить его, чтобы избежать путаницы и непредвиденных осложнений (из-за изменений схемы).

10 голосов
/ 12 сентября 2011

Он будет сгруппирован по первому полю в предложении select

4 голосов
/ 15 мая 2017

Это означает, что sql group by 1-й столбец в вашем предложении select, мы всегда используем это GROUP BY 1 вместе с ORDER BY 1, кроме того, вы также можете использовать вот так GROUP BY 1,2,3.., конечно, это удобно для нас, но вам нужно обратите внимание на это условие, результат может быть не тем, что вы хотите, если кто-то изменил ваши столбцы выбора, и он не визуализируется

4 голосов
/ 19 декабря 2014

Он будет группироваться по позиции столбца, которую вы поставили после предложения group by.

например, если вы запустите 'SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1' оно будет сгруппировано по SALESMAN_NAME.

Один риск при этом состоит в том, что если вы запустите 'Select *', и по какой-то причине вы заново создадите таблицу со столбцами в другом порядке, это даст вам другой результат, чем вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...