Angenommen, Sie haben eine Spalte, die 1s, 0s und NULLs enthält. Sie mögen Gruppe von nur 1 und 0 und zählen NULL als 0, nur zwei und nicht drei Zeilen in der Ergebnismenge zu geben:GROUP BY auf Spaltenalias mit NULLs gibt falsches Ergebnis in MySQL zurück
SELECT SUM(aTable.whatever),IFNULL(aNullableTable.NullableColumn,0) AS TRUEORFALSE FROM aTable LEFT JOIN aNullableTable ON aTable.ID = aNullableTable.ID GROUP BY IFNULL(aNullableTable.NullableColumn,0);
:
SELECT SUM(aTable.whatever),IFNULL(aNullableTable.NullableColumn,0) AS TRUEORFALSE FROM aTable LEFT JOIN aNullableTable ON aTable.ID = aNullableTable.ID GROUP BY TRUEORFALSE;
In meiner Welt dies gleichwertig sein sollte
Allerdings ist es nicht. Das erste Beispiel kann drei Zeilen zurückgeben, wenn NULL in der Spalte vorhanden ist. Das zweite Beispiel gruppiert NULL korrekt als 0.
Bin ich hier etwas falsch verstanden oder ist das ein Fehler?
Es sollte beachtet werden, dass das Verhalten, wenn ersetzen IFNULL mit so etwas wie ähnelt:
IF(NullableColumn IS NULL,0,1)
, IF(NullableColumn<1,0,1)
und IF(NullableColumn IS NOT NULL,1,0)
Beobachtet auf MySQL 5.7.11
Edit: Vielleicht sollte ich hinzufügen, dass Dies ist, wenn LINKE VERBINDUNG eine andere Tabelle, wo die NULL-Werte kommen. Ich habe nur das Beispiel bearbeitet.
Edit: Es stellte sich heraus, dass es war, weil ich SELECT IFNULL(NullableColumn,0) AS NullableColumn GROUP BY NullableColumn;
verwendet hatte Dies ist keine gute Idee, für zukünftige Referenz, und wird ein sehr verwirrendes Ergebnis geben. Im obigen Beispiel würden Sie zwei Zeilen mit 0 und eins mit 1 anstelle von NULL, 0 und 1 erhalten, wie erwartet, wenn GROUP BY tatsächlich nicht richtig funktioniert. Wie dumm von mir.
IFNULL() hat nur 2 Parameter und nicht 3 –
Oh, ja, richtig. Es tut uns leid. Ich werde das einfach korrigieren. Offensichtlich ist es in meinem getesteten Code korrekt. – nickdnk
http://sqlfiddle.com/#!9/c57094/2 Können Sie den Fehler in dieser Demo zeigen? –