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
Barbara StreisandOriginal
2025-01-03 20:15:40380Durchsuche

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;

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;

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!

Stellungnahme:
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