sql >> Databasteknik >  >> RDS >> Mysql

Fråga med GROUP BY och ORDER BY fungerar inte när flera kolumner i SELECT är valda

Du måste vara försiktig när du använder GROUP BY . När du förstår vad GROUP BY gör det kommer du att känna till problemet själv. Den gör en aggregering av dina data eller med andra ord, den minskar din data genom att göra någon operation på råposterna och skapa ett nytt reducerat antal poster på vilka någon aggregeringsfunktion har tillämpats (SUM, COUNT, AVG, etc.)

Fälten du anger i GROUP BY klausulen representerar nivån av aggregering/roll-up du går efter.

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

Här försöker du göra aggregeringen på col1 nivå, vilket betyder att för varje distinkt värde som finns i kolumn col1 , kommer det att göras en operation på några andra kolumner som du anger i SELECT klausul (här col2 ,col3 ) så att du i utgången har icke-repeterande värden i col1 och några sammanställda värden för col2 och col3 mot varje distinkt col1 värde baserat på vilken funktion du använder (SUM, COUNT, AVG, etc.).

Hur tillämpar du denna funktion? Det är det som saknas i din fråga ovan. För att lösa det måste du använda någon aggregeringsfunktion på fälten som finns i SELECT sats men inte i GROUP BY klausul. Ta ett exempel på SUM, prova detta:

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

ELLER för en bättre idé, ta bort WHERE filtrera och kontrollera utdata genom att köra:

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

Dessutom anledningen till att din andra fråga

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

fungerade beror på att du inte behöver tillämpa aggregering på fältet (här col2 ) som finns i GROUP BY klausul.



  1. två vänster yttre koppling fungerar inte Oracle sql

  2. PDOStatement::execute():SQLSTATE[HY093]:Ogiltigt parameternummer:antalet bundna variabler matchar inte antalet tokens

  3. JPA SET IDENTITY_INSERT fungerar inte

  4. VAR AKTUELL AV i PL/SQL