GROUP BY
asigna grupos de filas a una fila, por valor distinto en específico columnas, que ni siquiera tienen que estar necesariamente en la lista de selección.
SELECT b, c, d FROM table1 GROUP BY a;
Esta consulta es SQL legal (corrección: solo en MySQL; en realidad no es SQL estándar y no es compatible con otras marcas). MySQL lo acepta y confía en que sabes lo que estás haciendo, seleccionando b
, c
y d
de forma inequívoca porque son dependencias funcionales de a
.
Sin embargo, Microsoft SQL Server y otras marcas no permiten esta consulta porque no puede determinar las dependencias funcionales fácilmente. editar: En su lugar, SQL estándar requiere que siga la regla de valor único , es decir, cada columna en la lista de selección debe ser nombrada en GROUP BY
cláusula o ser un argumento para una función establecida.
Mientras que DISTINCT
siempre mira todas las columnas en la lista de selección, y solo esas columnas. Es un error común pensar que DISTINCT
le permite especificar las columnas:
SELECT DISTINCT(a), b, c FROM table1;
A pesar de los paréntesis que hacen DISTINCT
parece una llamada de función, no lo es. Es una opción de consulta y un valor distinto en cualquiera de los tres campos de la lista de selección dará lugar a una fila distinta en el resultado de la consulta. Una de las expresiones en esta lista de selección está entre paréntesis, pero esto no afectará el resultado.