GROUP BY
отображает группы строк в одну строку для каждого отдельного значения в определенных столбцах, которые даже не обязательно должны быть в списке выбора.
SELECT b, c, d FROM table1 GROUP BY a;
Этот запрос является допустимым SQL ( исправление: только в MySQL; на самом деле это не стандартный SQL и не поддерживается другими брендами). MySQL принимает это и надеется, что вы знаете, что делаете, выбирая b
, c
и d
однозначно, потому что они функциональные зависимости из a
.
Однако Microsoft SQL Server и другие бренды не разрешают этот запрос, поскольку он не может легко определить функциональные зависимости. edit: Вместо этого стандартный SQL требует, чтобы вы следовали правилу Single-Value , т. Е. Каждый столбец в списке выбора должен быть назван в предложении GROUP BY
или же быть аргумент для заданной функции.
Принимая во внимание, что DISTINCT
всегда просматривает все столбцы в списке выбора и только эти столбцы. Это распространенное заблуждение, что DISTINCT
позволяет вам указать столбцы:
SELECT DISTINCT(a), b, c FROM table1;
Несмотря на то, что круглые скобки DISTINCT
выглядят как вызов функции, это не так. Это опция запроса, и различное значение в любом из трех полей списка выбора приведет к отдельной строке в результате запроса. У одного из выражений в этом списке выбора есть круглые скобки, но это не повлияет на результат.