SQL按相同ID分组方法及偶数ID城市查询报错排查
1. 如何在SQL中对拥有相同Id编号的数据进行分组?
- 在SQL中,使用
GROUP BY子句即可对相同Id的数据进行分组,只需将Id作为分组字段。 - 若需要对分组后的数据做统计计算,可搭配聚合函数(如
COUNT()、SUM()、AVG()等)使用。 - 示例:
-- 统计每个Id对应的数据条数 SELECT Id, COUNT(*) AS data_count FROM your_table GROUP BY Id;
2. SQL语句报错排查及修正
需求回顾
从STATION表中查询ID为偶数的城市名称列表,结果需排除重复值,展示顺序不限。
原语句问题分析
你编写的SQL存在两个核心问题:
- 逻辑不符合需求:如果
Id是表的主键(通常主键具有唯一性),GROUP BY Id, CITY, STATE会将每一条ID为偶数的数据单独分组,完全起不到去重城市的作用;即使Id不唯一,分组字段包含Id也会导致相同城市但不同Id的数据被分成不同组,无法实现去重目标。 - 冗余字段查询:需求仅要求返回城市名称,原语句却额外查询了
STATE字段,属于不必要的操作。
修正后的SQL语句
方式一:使用DISTINCT直接去重(推荐,逻辑更清晰)
SELECT DISTINCT CITY FROM STATION WHERE ID % 2 = 0;
若需要同时返回对应的STATE字段并对CITY+STATE组合去重,可改为:
SELECT DISTINCT CITY, STATE FROM STATION WHERE ID % 2 = 0;
方式二:使用GROUP BY分组去重
如果想用GROUP BY实现去重,需将分组字段改为你要去重的目标字段(而非Id):
SELECT CITY FROM STATION WHERE ID % 2 = 0 GROUP BY CITY;
同理,需要同时返回STATE的话:
SELECT CITY, STATE FROM STATION WHERE ID % 2 = 0 GROUP BY CITY, STATE;
内容的提问来源于stack exchange,提问作者utaf buyukdama
相关产品推荐
相关产品推荐

