PostgreSQL:子查询与Having子句下如何获取符合条件的总数而非个体计数
问题解决:统计符合条件的记录总数
表结构与数据
| mrno | patencounterid |
|---|---|
| N23 | 38 |
| N23 | 39 |
| N23 | 40 |
需求
统计patencounterid大于对应mrno最小patencounterid的记录总数,预期结果为2(对应39、40两条记录)。
原SQL问题
原SQL使用GROUP BY patencounterid,会将每个不同的patencounterid单独分组,符合条件的39和40各成一组,每组COUNT(mrno)结果都是1,因此返回两行值为1的结果,不符合需求。
修改后的SQL方案
方案1:直接过滤统计(针对单个mrno)
SELECT COUNT(*) FROM billingpatencounter WHERE mrno = 'N23' AND patencounterid > (SELECT MIN(patencounterid) FROM billingpatencounter WHERE mrno = 'N23');
该语句直接筛选出mrno='N23'且patencounterid大于该mrno最小id的记录,再统计总数,返回结果为2。
方案2:适配多mrno场景(可扩展)
如果需要同时统计多个mrno的符合条件记录数,可先计算每个mrno的最小patencounterid,再关联原表统计:
SELECT COUNT(*) FROM billingpatencounter b INNER JOIN ( SELECT mrno, MIN(patencounterid) AS min_patencounterid FROM billingpatencounter GROUP BY mrno ) m ON b.mrno = m.mrno WHERE b.patencounterid > m.min_patencounterid AND b.mrno = 'N23';
内容的提问来源于stack exchange,提问作者Atif
相关产品推荐
相关产品推荐

