PostgreSQL其中计数条件
我在PostgreSQL中有以下查询:
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; 为什么我得到这个错误:
我的桌面结构: License(license_id,license_name,limit_call,create_date,expire_date) Log(log_id,license_id,log,call_date) 我想检查一个许可证是否达到了特定月份的通话限制。 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 --,a.limit_call -- add in old versions HAVING a.limit_call > count(b.license_id) 要点 >在PostgreSQL 9.1之前的版本中,您必须向GROUP BY子句添加limit_call。
>我颠倒了你的表在查询中出现的顺序,并清理了一些语法,使它不那么混乱。使用在这里只是一个标志性的方便。
>如果可能,我建议不要在Postgres中使用mixed case identifiers。很容易出错> count()只计算非空值。因为你想计数相关条目int表“日志”,使用count(b.license_id)更安全,更便宜一点。该列在连接中使用,因此我们不必打扰列是否为空。count(*)会更短,稍快一点。如果在左侧表格中为0行计数为1,则我将使用它。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |