Heim > Datenbank > MySQL-Tutorial > Wie kann MySQL effektiv bedingte Aggregationen ohne direkte Unterstützung für „SUM IF' und „COUNT IF' erreichen?

Wie kann MySQL effektiv bedingte Aggregationen ohne direkte Unterstützung für „SUM IF' und „COUNT IF' erreichen?

Susan Sarandon
Freigeben: 2024-11-15 00:58:02
Original
744 Leute haben es durchsucht

How can MySQL effectively achieve conditional aggregations without direct support for 'SUM IF' and 'COUNT IF'?

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 |
Nach dem Login kopieren

Das Ziel besteht darin, Folgendes zu berechnen:

  • Die Gesamtzahl der Datensätze
  • Die Gesamtzahl der Stunden
  • Die Anzahl der Datensätze, bei denen „art“ gleich ist 1

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
Nach dem Login kopieren

Diese Abfrage führt die folgenden Vorgänge aus:

  • count(id): Zählt die Gesamtzahl der Datensätze.
  • SUM(hour) : Berechnet die Gesamtzahl der Stunden.
  • SUM(case when kind = 1 then 1 else 0 end): Verwendet eine CASE-Anweisung, um Zählen Sie bedingt die Anzahl der Datensätze, bei denen „Art“ gleich 1 ist.

Ausgabe:

| count(id) | totHour | countKindOne |
|---|---|---|
| 4 | 70 | 2 |
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage