Heim >Datenbank >MySQL-Tutorial >Wie berechnet man effizient den Prozentsatz übereinstimmender Zeilen in PostgreSQL?

Wie berechnet man effizient den Prozentsatz übereinstimmender Zeilen in PostgreSQL?

Linda Hamilton
Linda HamiltonOriginal
2024-12-27 09:10:12557Durchsuche

How to Efficiently Calculate Percentages of Matching Rows in PostgreSQL?

Prozentsatzberechnung aus SUM() innerhalb einer PostgreSQL-Abfrage

Die Abfrage verstehen

Die Die bereitgestellte Abfrage zielt darauf ab, den Prozentsatz der Zeilen zu berechnen, in denen value_a und value_b in der Tabelle my_obj gleich sind. Es tritt jedoch ein Fehler auf, da die Spalte „nb_ok“, auf die in der gespeicherten Prozedur „compute_percent“ verwiesen wird, nicht vorhanden ist.

Optimierte Lösung

Um dieses Problem zu beheben, sollten Sie Folgendes in Betracht ziehen eine effizientere Ansatz:

SELECT property_name,
       (COUNT(value_a = value_b OR NULL) * 100) / COUNT(*) AS pct
FROM my_obj
GROUP BY property_name;

Erklärung

Diese Abfrage:

  • Zählt die Anzahl der Zeilen, bei denen value_a = value_b mit COUNT(.. .).
  • Verarbeitet NULL-Werte mithilfe des Ausdrucks (value_a = value_b OR NULL).
  • Dividiert die Anzahl der übereinstimmenden Zeilen durch die Gesamtzahl der Zeilen unter Verwendung von (COUNT(...) * 100) / COUNT(*).
  • Berechnet den Prozentsatz ohne Notwendigkeit für eine externe Funktion.
  • Gruppiert die Ergebnisse nach Eigenschaftsname, um Prozentsätze für jede Eigenschaft anzuzeigen Gruppe.

Einschließlich Bruchstellen

Um Bruchstellen im Ergebnis beizubehalten, verwenden Sie die folgende modifizierte Abfrage:

SELECT property_name,
       ROUND((COUNT(value_a = value_b OR NULL) * 100.0) / COUNT(*), 2) AS pct
FROM my_obj
GROUP BY property_name;

Dies Die Version verwendet ROUND(...), um den Prozentsatz auf zwei Dezimalstellen zu runden.

Das obige ist der detaillierte Inhalt vonWie berechnet man effizient den Prozentsatz übereinstimmender Zeilen in PostgreSQL?. 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