Heim >Datenbank >MySQL-Tutorial >Wie zähle ich Zeilen in PostgreSQL mithilfe der WHERE- und Aggregate-Funktionen korrekt?

Wie zähle ich Zeilen in PostgreSQL mithilfe der WHERE- und Aggregate-Funktionen korrekt?

Barbara Streisand
Barbara StreisandOriginal
2024-12-25 12:06:16597Durchsuche

How to Correctly Count Rows in PostgreSQL Using WHERE and Aggregate Functions?

PostgreSQL WHERE-Zählbedingung

In PostgreSQL gibt die folgende Abfrage einen Fehler zurück:

SELECT 
    COUNT(a.log_id) AS overall_count
FROM 
    "Log" as a, 
    "License" as b 
WHERE 
    a.license_id=7 
AND 
    a.license_id=b.license_id 
AND
    b.limit_call > overall_count
GROUP BY 
    a.license_id;
ERROR:  column "overall_count" does not exist

Der Grund für diesen Fehler ist dass die WHERE-Klausel auf eine Ausgabespalte „overall_count“ verweist, die noch nicht in der Tabellenstruktur definiert ist. Um dies zu beheben, müssen wir die Zählbedingung in die HAVING-Klausel verschieben, da sie sich auf ein Aggregatfunktionsergebnis bezieht, nachdem WHERE angewendet wurde.

Außerdem sollte die Abfrage auch einen LEFT JOIN anstelle eines regulären JOIN verwenden Vermeiden Sie den Ausschluss von Lizenzen ohne Protokolle und verwenden Sie count(b.license_id) oder count(*) für Effizienz und Klarheit.

Die richtige Abfrage sollte so aussehen dies:

SELECT a.license_id, a.limit_call
     , count(b.license_id) AS overall_count
FROM   "License"  a
LEFT   JOIN "Log" b USING (license_id)
WHERE  a.license_id = 7 
GROUP  BY a.license_id 
HAVING a.limit_call > count(b.license_id)

Das obige ist der detaillierte Inhalt vonWie zähle ich Zeilen in PostgreSQL mithilfe der WHERE- und Aggregate-Funktionen korrekt?. 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