如何在一对多关系中统计分类特定记录——按县统计重罪轻罪数量
按县统计重罪与轻罪调查数量
需求说明
生成一份按县分组的列表,包含每个县的重罪调查数量和轻罪调查数量(调查按被告维度统计,同一被告的多项同类型指控计为1次调查)。
表结构
Court表
| ID | DefendantID | CountyID |
|---|---|---|
| 00035ed9 | 2a1e50f9 | Haus County |
| 000b2a8c | F3dc3251 | Saul County |
Pending Charge表(别名vPendingCharges)
| ID | DefendantID | CourtID | Class |
|---|---|---|---|
| 9f78778d | 2a1e50f9 | 00035ed9 | 3 |
| a53a4841 | 2a1e50f9 | 00035ed9 | 2 |
| a9d2c5a2 | F3dc3251 | 000b2a8c | A |
| daf26cb0 | F3dc3251 | 000b2a8c | A |
期望输出
| County | Number Felony | Number Misdemeanor |
|---|---|---|
| Haus County | 1 | 0 |
| Saul County | 0 | 1 |
解决方案SQL
SELECT c.CountyID AS County, COUNT(DISTINCT CASE WHEN pc.Class IN ('2', '3') THEN pc.DefendantID END) AS `Number Felony`, COUNT(DISTINCT CASE WHEN pc.Class = 'A' THEN pc.DefendantID END) AS `Number Misdemeanor` FROM Court c LEFT JOIN vPendingCharges pc ON pc.CourtID = c.ID GROUP BY c.CountyID;
说明
- 使用
LEFT JOIN确保所有县都能被统计,哪怕该县没有任何指控记录 - 通过
COUNT(DISTINCT ...)按被告维度统计调查数量,避免同一被告的多项指控重复计数 - 依据示例中的
Class值设定重罪/轻罪判断条件,可根据实际业务规则调整CASE WHEN中的匹配逻辑
内容的提问来源于stack exchange,提问作者Haus
相关产品推荐
相关产品推荐

