Elegante Lösung: Überwindung der Einschränkungen von „SUM IF“ und „COUNT IF“ in MySQL
Trotz ihrer Nützlichkeit mangelt es MySQL an direkter Unterstützung für die Funktionen „SUM IF“ und „COUNT IF“. Diese Einschränkung kann beim Umgang mit bedingten Aggregationen oft frustrierend sein. Es gibt jedoch eine elegante Lösung mit CASE-Anweisungen.
Stellen Sie sich das folgende Szenario vor:
| id | hour | kind | |---|---|---| | 1 | 10 | 1 | | 2 | 15 | 2 | | 3 | 20 | 1 | | 4 | 25 | 3 |
Das Ziel besteht darin, Folgendes zu berechnen:
Ursprüngliche Versuche und MySQLs Antwort:
Die ersten Versuche mit „SUM( IF(...) )“ oder „COUNT( IF(. ..) )' führen zu einem Fehler. MySQL erlaubt keine Mischung von Aggregatfunktionen mit Kontrollstrukturen wie „IF“.
Lösung mit der CASE-Anweisung:
Die CASE-Anweisung stellt einen bedingten Ausdruck zur dynamischen Auswertung und Rückgabe bereit Werte. Es kann verwendet werden, um die gewünschten bedingten Aggregationen effektiv zu erreichen. So geht's:
SELECT count(id), SUM(hour) as totHour, SUM(case when kind = 1 then 1 else 0 end) as countKindOne
Diese Abfrage führt die folgenden Vorgänge aus:
Ausgabe:
| count(id) | totHour | countKindOne | |---|---|---| | 4 | 70 | 2 |
Durch die Verwendung der CASE-Anweisung können wir dies elegant tun Überwinden Sie die Einschränkungen von „SUM IF“ und „COUNT IF“ in MySQL und ermöglichen Sie effiziente bedingte Aggregationen.
Das obige ist der detaillierte Inhalt vonWie kann MySQL effektiv bedingte Aggregationen ohne direkte Unterstützung für „SUM IF' und „COUNT IF' erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!