SQL Server中不使用WITH实现STRING_AGG去重聚合
解决办法
情况1:使用SQL Server 2022及以上版本
SQL Server 2022开始支持在STRING_AGG()中直接使用DISTINCT关键字,无需额外子查询即可完成去重聚合:
SELECT your_group_column, ROUND(AVG(ins.Evaluation), 2) AS evaluation, STRING_AGG(DISTINCT your_agg_column, ',') AS unique_aggregated_values FROM your_table ins GROUP BY your_group_column
情况2:使用SQL Server 2022以下版本(且不能用WITH)
通过嵌套派生表先对要聚合的字段去重,再关联主查询结果完成聚合:
SELECT main.your_group_column, main.evaluation, STRING_AGG(sub.unique_value, ',') AS unique_aggregated_values FROM ( -- 先计算分组后的AVG值,确保这部分结果唯一 SELECT your_group_column, ROUND(AVG(Evaluation), 2) AS evaluation FROM your_table GROUP BY your_group_column ) main -- 派生表取出每个分组下的唯一聚合字段值 JOIN ( SELECT DISTINCT your_group_column, your_agg_column AS unique_value FROM your_table ) sub ON main.your_group_column = sub.your_group_column GROUP BY main.your_group_column, main.evaluation
关键说明
原查询出现重复是因为STRING_AGG()会聚合所有匹配行的字段值,即使存在重复,外层的GROUP BY和DISTINCT无法直接作用于聚合函数内部的重复值。嵌套派生表的方式先在子查询中完成去重,再将唯一值传入STRING_AGG(),确保最终聚合结果无重复。
内容的提问来源于stack exchange,提问作者alesssz
相关产品推荐
相关产品推荐

