sql >> Base de Datos >  >> RDS >> Sqlserver

grupo sql por versus distinto

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.