GROUP BY后分组记录超1条时显示指定值替代LISTAGG结果的实现方法
解决方案
你要的效果用CASE搭配分组计数就能实现,不需要调用LISTAGG,参考通用写法如下:
select Country, case when count(distinct City) = 1 then max(City) else 'MULTIPLE' end as City, sum(Population) as Population from table1 group by Country
说明
- 你已经按
Country做分组,不需要额外用min(Country)取国家名,直接返回Country字段即可 count(distinct City)用于统计当前国家对应的唯一城市数量,如果你的表中同一个国家不会有重复的城市行,也可以简化为count(City)- 当分组内城市数为1时,
max(City)/min(City)都可以直接取到唯一的城市名称;城市数大于1时直接返回自定义文本即可 - 上述写法是通用SQL语法,兼容MySQL、Oracle、SQL Server、PostgreSQL等绝大多数主流数据库
内容的提问来源于stack exchange,提问作者xFredx
相关产品推荐
相关产品推荐

