如何用单条SQL查询统计同一列出现1次和多次的ID数量
单条SQL实现方案
核心逻辑是先分组统计每个ID的出现频次,再基于频次做条件聚合统计,仅需一次全表扫描,性能远高于两次独立的HAVING查询。
通用SQL语句(兼容所有主流数据库)
SELECT SUM(CASE WHEN id_count = 1 THEN 1 ELSE 0 END) AS Occurrences_Once, SUM(CASE WHEN id_count > 1 THEN 1 ELSE 0 END) AS Occurrences_greater_than_one FROM ( SELECT ID, COUNT(*) AS id_count -- 替换为你的实际表名 FROM your_table_name GROUP BY ID ) AS t;
逻辑说明
- 内层子查询先按ID分组,计算每个ID的出现次数,仅扫描一次原表
- 外层通过
CASE条件判断每个ID的频次类型,累加得到两类ID的总数量
示例数据验证
针对你给出的测试数据,运行上述SQL得到的结果完全符合预期:
| Occurrences_Once | Occurrences_greater_than_one |
|---|---|
| 1 | 2 |
内容的提问来源于stack exchange,提问作者Chris90
相关产品推荐
相关产品推荐

