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.