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!