Что означает предложение SQL "GROUP BY 1"?

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

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

Ответ 1

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

Ответ 2

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.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

Ответ 6

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