Heim > Datenbank > MySQL-Tutorial > Wie kann ich Prozentsätze aus einem COUNT() in einer einzelnen SQL-SELECT-Anweisung effizient berechnen?

Wie kann ich Prozentsätze aus einem COUNT() in einer einzelnen SQL-SELECT-Anweisung effizient berechnen?

Barbara Streisand
Freigeben: 2025-01-03 20:15:40
Original
341 Leute haben es durchsucht

How Can I Efficiently Calculate Percentages from a COUNT() in a Single SQL SELECT Statement?

Berechnen von Prozentsätzen aus SUM() in derselben SELECT-Anweisung in SQL

Im Kontext der Tabelle my_obj mit den Ganzzahlfeldern value_a und value_b ist es möglich, den Prozentsatz der Zeilen zu berechnen, in denen value_a gleich value_b ist. Bei der ersten Abfrage wurde versucht, dies mithilfe einer gespeicherten Prozedur zu erreichen, es trat jedoch ein Fehler auf.

Vereinfachte und effizientere Lösung

Ein einfacherer und schnellerer Ansatz ist wie folgt:

SELECT property_name
      ,(count(value_a = value_b OR NULL) * 100) / count(*) AS pct
FROM   my_obj
GROUP  BY 1;
Nach dem Login kopieren

Diese Abfrage:

  • Berechnet den Zähler des Prozentsatzes durch Zählen die Anzahl der Zeilen, in denen value_a gleich value_b ist, unter Verwendung des Ausdrucks count(value_a = value_b OR NULL). OR NULL stellt sicher, dass NULL-Werte im Gleichheitsvergleich als FALSE behandelt werden.
  • Berechnet den Nenner des Prozentsatzes mithilfe von count(*), der alle Zeilen zählt, einschließlich derjenigen mit NULL-Werten.
  • Dividiert den Zähler durch den Nenner, um den Prozentsatz zu erhalten, und weist ihn dem Alias ​​zu pct.

Umgang mit NULL-Werten

Diese Lösung behandelt NULL-Werte entsprechend, im Gegensatz zur ursprünglichen Abfrage, die zu falschen Ergebnissen oder Fehlern bei der Division durch Null führen könnte .

Dezimalstellen erhalten

Zum Bewahren Wenn das Ergebnis Dezimalstellen enthält, ändern Sie die Abfrage wie folgt:

SELECT property_name
      ,round((count(value_a = value_b OR NULL) * 100.0) / count(*), 2) AS pct
FROM   my_obj
GROUP  BY 1;
Nach dem Login kopieren

Diese Änderung multipliziert den Zähler mit 100,0, um numerische Genauigkeit zu erzwingen, und verwendet dann Round(), um die Anzahl der zu erhaltenden Dezimalstellen anzugeben.

Schlussfolgerung

Durch Verwendung der vereinfachten Abfrage oder der modifizierten Abfrage mit Durch die Beibehaltung der Dezimalzahl kann man Prozentsätze aus SUM() innerhalb derselben SELECT-Anweisung effektiv berechnen und NULL-Werte entsprechend behandeln.

Das obige ist der detaillierte Inhalt vonWie kann ich Prozentsätze aus einem COUNT() in einer einzelnen SQL-SELECT-Anweisung effizient berechnen?. 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