PostgreSQL按taluk_code和taluk_name分组统计总数与过期数
PostgreSQL合并分组统计查询:同时计算许可证总数与过期数量
你可以通过条件聚合来合并两个查询,只需要一次表扫描就能得到所需的统计结果,比分别查询再关联的效率更高。核心思路是在分组统计时,用COUNT计算总数,用CASE语句配合SUM筛选出过期的记录并计数。
合并后的完整查询
SELECT l.taluk_code, t.taluk_name, COUNT(l.serial_number) AS total, SUM(CASE WHEN l.validity_to <= NOW() THEN 1 ELSE 0 END) AS ExpiryCount FROM license_register l INNER JOIN taluk t ON l.taluk_code = t.taluk_code WHERE l.rev_district_code = '17' GROUP BY l.taluk_code, t.taluk_name;
逻辑说明
COUNT(l.serial_number):统计符合rev_district_code='17'的所有许可证总数(和你原来的总数查询逻辑一致)。SUM(CASE WHEN l.validity_to <= NOW() THEN 1 ELSE 0 END):对每条记录判断是否过期,过期则计1,否则计0,最后求和得到过期许可证的数量(替代原来单独的过期统计查询)。- 改用显式
INNER JOIN替代隐式连接语法,让查询逻辑更清晰易读。
这个查询会直接输出包含taluk_code、taluk_name、total、ExpiryCount的结果集,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Meenatchi P
相关产品推荐
相关产品推荐

