sql >> Base de Datos >  >> RDS >> Mysql

La consulta con GROUP BY y ORDER BY no funciona cuando se eligen varias columnas en SELECCIONAR

Debe tener cuidado cuando use GROUP BY . Una vez que comprenda qué GROUP BY lo hace, usted mismo conocerá el problema. Realiza una agregación de sus datos o, en otras palabras, reduce sus datos al realizar alguna operación en las entradas sin procesar y crear un nuevo número reducido de entradas en las que se ha aplicado alguna función de agregación (SUM, COUNT, AVG, etc.)

Los campos que proporcionas en el GROUP BY cláusula representa el nivel de agregación/resumen que busca.

SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

Aquí está tratando de hacer la agregación en col1 nivel, lo que significa que para cada valor distinto presente en la columna col1 , se realizará alguna operación en algunas otras columnas que proporcione en SELECT cláusula (aquí col2 ,col3 ) para que en la salida tenga valores no repetidos en col1 y algunos valores acumulados de col2 y col3 contra cada col1 distinto valor basado en la función que aplica (SUM, COUNT, AVG, etc.).

¿Cómo aplicas esta función? Eso es lo que falta en su consulta anterior. Para resolverlo, debe aplicar alguna función de agregación en los campos que están presentes en SELECT pero no en GROUP BY cláusula. Tomando un ejemplo de SUM, intente esto:

SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

O para una mejor idea, eliminando WHERE filtrar y verificar la salida ejecutando:

SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1

Además, la razón por la cual su otra consulta

SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2

trabajado es porque no necesita aplicar la agregación al campo (aquí col2 ) que está presente en el GROUP BY cláusula.