MYSQL - ROLLUP - Ersetzen Sie die NULL mit ZWISCHENSUMME und SUMME
Habe ich versucht, IFNULL zu ersetzen, die NULL-Felder zurückgegeben, die von ROLLUP für Zwischensummen und Summen, aber es scheint nicht zu funktionieren.
Abfrage:
select IFNULL(usergroups.name, 'GROUP') AS DEALER,
IFNULL(users.name, 'TOTAL') AS SERVICE_ADVISOR,
COUNT(DISTINCT vcrs.uid) AS COMPLETED,
..........
..........
and vcrs.vcrSubStatus = 4
group by DEALER, SERVICE_ADVISOR with ROLLUP;
Ausgabe:
DEALER SERVICE_ADVISOR COMPLETED IDENTIFIED AUTHORISED
Aston Martin Chris 3 664.56 0
Aston Martin Graham 6 0 0
Aston Martin (NULL) 15 664.56 0
Bentley Sukraj 1 0 0
Bentley Terry 4 0 0
Bentley (NULL) 5 0 0
Jaguar Emma 10 2448 1224
Jaguar Paul 1 0 0
Jaguar Simon 7 2754 918
Jaguar (NULL) 18 5202 2142
(NULL) (NULL) 2611 96591.62 42130.14
Gewünschte Ausgabe:
DEALER SERVICE_ADVISOR COMPLETED IDENTIFIED AUTHORISED
Aston Martin Chris 3 664.56 0
Aston Martin Graham 6 0 0
Aston Martin TOTAL 15 664.56 0
Bentley Sukraj 1 0 0
Bentley Terry 4 0 0
Bentley TOTAL 5 0 0
Jaguar Emma 10 2448 1224
Jaguar Paul 1 0 0
Jaguar Simon 7 2754 918
Jaguar TOTAL 18 5202 2142
GROUP TOTAL 2611 96591.62 42130.14
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen Sie so etwas?
Test:
Ich bin nur 2 Jahre zu spät, aber da stieß ich auf das gleiche Problem wie @the_gimlet ich dachte, ich würde post die Antwort.
So don T wissen, ob dies ist eine mySQL-Versionsverwaltung oder etwas, aber mit mysql 5.6 bekomme ich das gleiche problem... ifnull ersetzen nicht die rollup 'null'.
Einfach dies zu umgehen, indem Sie Ihre rollup eine Unterabfrage, und das tun die ifnulls in der Haupt-select... ärgerlich, wiederholen Sie das wählen, aber es funktioniert!
z.B. für das obige Beispiel
Das Problem wird verursacht, durch die
GROUP BY
segment der Spalte alias ausgeführt wird nach die Zeilen verarbeitet, die zum erstellen der alias-Werte Gruppe auf.Als Ergebnis;
NULL
ist nicht in der Datensatzgruppe fürIFNULL/COALESCE
zu validieren gegen.Beispiel DB-Fiddle
Abfrage #1
Beheben Sie das Problem mit
COALESCE/IFNULL
müssen SieGROUP BY
der Tabelle Spaltennamen anstatt der Aliase verarbeitet.Anderes Thema, misstrauisch zu sein, ist mit MySQL 5.7 und ONLY_FULL_GROUP_BY, wodurch ausgewählte nicht-Aggregat-Spalten, die nicht in der
GROUP BY
zu scheitern. SoSELECT COALESCE(YEAR(foo), 'foo') GROUP BY YEAR(foo) WITH ROLLUP
wird nicht funktionieren.Abfrage #2
Für Ihr spezifisches Problem
Beispiel DB-Fiddle
Abfrage #1
Abfrage #2
Als Randbemerkung
COALESCE
,IFNULL
, undCASE WHEN IS NULL
alle ähnlich funktionieren. WoIFNULL
ist die proprietäre MySQL und ist eine weniger funktionelle Ersatz vonCOALESCE
. AlsCOALESCE
annehmen kann, mehr als zwei Parameter zu überprüfen, gegenNULL
wieCOALESCE(NULL, NULL, NULL, 1)
.Was du suchst ist eine case-Anweisung.
Was Sie sagen, ist, dass unter einer bestimmten Bedingung ersetzen Sie den gefundenen Wert mit dem Wert angegeben. Sie können mehrere wenn/dann-Aussagen, je nachdem, wie maßgeschneidert Sie möchten die Ersetzungen zu werden.