在SQL Server中统计Road计数大于1的Code分组记录
SQL语句验证与修正
原数据表
| Road | Code |
|---|---|
| A | 1 |
| B | 1 |
| C | 2 |
| D | 2 |
| E | 1 |
| F | 3 |
| H | 4 |
需求
统计Code对应的Road记录数大于1的结果,输出列名为Count(记录数)和Code。
原SQL存在的问题
原SQL语句有4处明显问题:
- 字段名不匹配:原表字段为
Code,但语句中使用了不存在的Road_Code字段; - 多余的
DISTINCT:GROUP BY已经按Code分组,每组仅返回一条结果,添加DISTINCT属于冗余操作,无意义; - HAVING条件错误:需求是筛选记录数大于1的分组,原语句用
COUNT(Distinct [Road])会统计去重后的Road数量,若存在重复Road值会导致统计结果不符合预期,应直接统计记录数; - 缺少列别名:统计结果的计数列未指定
Count别名,无法匹配预期输出的列名。
修正后的SQL语句
SELECT COUNT([Road]) AS [Count], [Code] FROM [Combined] GROUP BY [Code] HAVING COUNT([Road]) > 1
验证结果
执行修正后的SQL,输出结果与预期完全一致:
| Count | Code |
|---|---|
| 3 | 1 |
| 2 | 2 |
内容的提问来源于stack exchange,提问作者Rababah NOR
相关产品推荐
相关产品推荐

