如何处理重复标题行:多描述标题显示'Duplicate'
解决方法
你的SQL报错是因为在GROUP BY Title后,SELECT子句中的Description既不在分组字段里,也没有用聚合函数包裹,不符合SQL的分组查询规则。以下两种无需过多子查询的方案可以解决问题:
方案一:使用聚合函数结合CASE
利用聚合函数(如MAX()/MIN())获取唯一描述,同时通过COUNT()判断是否存在多条记录:
SELECT Title, CASE WHEN COUNT(*) > 1 THEN 'Duplicate' ELSE MAX(Description) END AS Title_desc FROM Titles GROUP BY Title;
- 原理:
GROUP BY Title将相同标题的行合并,COUNT(*)统计每个标题对应的记录数;当记录数大于1时返回Duplicate,否则用MAX(Description)获取该标题唯一的描述(因为只有一条记录,MAX()和MIN()结果一致)。
方案二:使用窗口函数+DISTINCT
通过窗口函数统计每个标题的记录数,再去重得到唯一行:
SELECT DISTINCT Title, CASE WHEN COUNT(*) OVER(PARTITION BY Title) > 1 THEN 'Duplicate' ELSE Description END AS Title_desc FROM Titles;
- 原理:
COUNT(*) OVER(PARTITION BY Title)会为每一行计算其所属标题的总记录数,CASE根据这个计数返回对应内容;最后用DISTINCT去掉同一标题的重复行,因为同一标题的所有行经过CASE处理后结果完全相同。
内容的提问来源于stack exchange,提问作者Coding Duchess
相关产品推荐
相关产品推荐

