Oracle SQL多字段分组多计数统计:基于现有查询结果实现需求
Oracle SQL: 多字段分组结合COUNT统计记录数
根据你的表数据和统计需求,我整理了几个常见的统计场景及对应的SQL实现,你可以根据实际业务需求选择使用:
场景1:按患者(NUM_MALADE)维度汇总统计
如果想了解每个患者关联的不同医生数量、涉及的专科数量,以及总的就诊记录数,用这个查询:
SELECT NUM_MALADE, COUNT(DISTINCT NUM_MED) AS total_unique_doctors, COUNT(DISTINCT SPECIALITE) AS total_unique_specialties, COUNT(*) AS total_visits FROM PATIENT_MED_SPEC GROUP BY NUM_MALADE ORDER BY NUM_MALADE;
这个查询会返回每个患者的:
- 关联的不同医生数量(去重统计)
- 涉及的不同专科数量(去重统计)
- 总的就诊记录条数(包含同一医生/专科的重复记录)
场景2:按专科(SPECIALITE)维度汇总统计
如果要统计每个专科的患者覆盖量、医生数量及业务记录总数,用这个查询:
SELECT SPECIALITE, COUNT(DISTINCT NUM_MALADE) AS total_unique_patients, COUNT(DISTINCT NUM_MED) AS total_unique_doctors, COUNT(*) AS total_records FROM PATIENT_MED_SPEC GROUP BY SPECIALITE ORDER BY SPECIALITE;
这个分组能帮你清晰掌握各专科的患者规模、医生配置和业务量。
场景3:按患者+专科的组合维度统计
如果需要更细粒度的统计,比如每个患者在某专科的就诊次数、接触过的医生数量,用这个查询:
SELECT NUM_MALADE, SPECIALITE, COUNT(DISTINCT NUM_MED) AS doctors_in_specialty, COUNT(*) AS visits_in_specialty FROM PATIENT_MED_SPEC GROUP BY NUM_MALADE, SPECIALITE ORDER BY NUM_MALADE, SPECIALITE;
关键说明
COUNT(*):统计分组内的所有记录,包含重复条目;COUNT(DISTINCT 字段):统计该字段在分组内的唯一值数量,适合去重统计;- Oracle要求
GROUP BY后的字段必须与SELECT中非聚合函数的字段完全对应,否则会触发语法错误。
内容的提问来源于stack exchange,提问作者Boussadjra Brahim
相关产品推荐
相关产品推荐

