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