Чего достигают целые числа через запятую в выражении GROUP BY? - PullRequest
5 голосов
/ 17 июня 2011

У меня такой запрос:

SELECT col1, col2, col3, col4, col5, SUM(col6) AS total
FROM table_name
WHERE col1 < 99999
GROUP BY 1,2,3,4,5

Что на самом деле выполняет оператор GROUP BY?Запрос не работает должным образом без целых чисел, разделенных запятыми.

Ответы [ 3 ]

7 голосов
/ 17 июня 2011

Это эквивалентно написанию:

SELECT col1, col2, col3, col4, col5, SUM(col6) AS total
  FROM table_name
 WHERE col1 < 99999
 GROUP BY col1, col2, col3, col4, col5

Числа - это значения / столбцы в списке выбора, выраженные порядковым номером в списке, начиная с 1.

Номера, используемые в обязательном порядке; затем была добавлена ​​возможность использовать выражения в списке выбора. Выражения могут быть громоздкими, и не все СУБД позволяют использовать «отображать метки» или «псевдонимы столбцов» из списка выбора в предложении GROUP BY, поэтому иногда полезно использовать номера столбцов.

В вашем примере было бы лучше использовать имена - они просты. И, вообще, используйте имена, а не цифры, когда вы можете.

3 голосов
/ 17 июня 2011

Я предполагаю, что ваш продукт базы данных позволяет ссылаться на столбцы в группе «По», а не только по имени столбца (т. Е. 1 для первого столбца, 2 для второго столбца и т. Д.) Если это так, то это проприетарная функция и не рекомендуется из-за переносимости и (возможно) проблем с читабельностью (но по общему признанию может быть полезна для быстрого и грязного запроса).

1 голос
/ 17 июня 2011

Попытка выполнить один и тот же запрос в MS SQL Server 2005

select distinct host from some_table group by 1,2,3

Из-за ошибки сказано:

Each GROUP BY expression must contain at least one column that is not an outer reference.

Так что это означает, что эти 1,2,3 являются ничем иным, как внешней ссылкой столбца

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