SQL如何实现多城市客户标记为Mix、单城市客户显示对应城市的查询
SQL 实现多城市客户标记方案
实现逻辑
- 按
customer字段分组聚合单客户的所有城市记录 - 统计每个客户对应的去重城市数量,可通过
LOWER()函数规避大小写导致的判断误差 - 条件判断返回结果:唯一城市直接返回城市名,多个城市返回
Mix
可用 SQL 语句
SELECT customer, CASE WHEN COUNT(DISTINCT LOWER(city)) = 1 THEN MAX(city) ELSE 'Mix' END AS city FROM 你的表名 -- 替换为你实际的表名 GROUP BY customer -- 可选:按客户名排序 ORDER BY customer;
用到的核心SQL语法说明
GROUP BY customer:将同个客户的所有记录合并为一组,是聚合统计的基础COUNT(DISTINCT LOWER(city)):统计每个客户对应的不重复城市数量,LOWER()将城市名统一转为小写判断,避免示例中france/France这类大小写差异导致的误判,不需要区分大小写时可去掉该函数CASE WHEN:条件分支语句,这里用来根据城市数量返回对应结果MAX(city):当客户仅对应一个城市时,用聚合函数提取该唯一城市值,符合SQL分组后非分组字段必须聚合的语法要求,换成MIN(city)效果一致
该写法为标准ANSI SQL,兼容MySQL、PostgreSQL、SQL Server、Oracle等绝大多数主流数据库,代入你的表名即可直接运行,测试示例数据可得到你期望的输出结果。
内容的提问来源于stack exchange,提问作者Rubiana
相关产品推荐
相关产品推荐

