You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:如何统计列唯一值数量及各值的平均分数?

解决你的SQL统计问题

我明白你想要按城市统计两个核心指标:唯一ID的数量和所有metric值的平均分数,你的原始SQL因为逻辑偏差导致结果不对,我来帮你修正。

问题拆解

从你的示例数据和期望结果来看:

  • city_count_unique:是每个城市下不同id的数量(比如Berlin有1a、1b两个唯一ID,所以值为2)
  • average_metric_score:是该城市所有metric_value的总和除以总metric记录数(比如Berlin的总和是1+2+3+4+5+3=18,总记录数6,18/6=3)

原始SQL的问题

你的子查询SELECT DISTINCT metric_value, city FROM dbo.Table存在两个关键错误:

  1. 错误去重数据:比如Berlin的comments=3出现了两次,会被合并成一条,导致后续计算的平均值和计数都不准确
  2. 未利用id统计唯一ID:原SQL里的COUNT(*)统计的是去重后的metric_value+city组合数,完全不是你需要的唯一ID数量

正确的SQL语句

下面的语句可以准确得到你想要的结果:

SELECT 
    city,
    COUNT(DISTINCT id) AS city_count_unique,
    -- *1.0是为了避免整数除法问题,确保结果是浮点数
    SUM(metric_value) * 1.0 / COUNT(*) AS average_metric_score
FROM dbo.Table
GROUP BY city;

你也可以直接用AVG(metric_value),效果完全一致(因为AVG本质就是总和除以记录数):

SELECT 
    city,
    COUNT(DISTINCT id) AS city_count_unique,
    AVG(metric_value) AS average_metric_score
FROM dbo.Table
GROUP BY city;

结果验证

针对你的示例数据:

  • Berlin的COUNT(DISTINCT id)是2,SUM(metric_value)*1.0/COUNT(*)是18/6=3
  • Hamburg的COUNT(DISTINCT id)是2,SUM(metric_value)*1.0/COUNT(*)是17/6≈2.8
    完全匹配你期望的结果。

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:12:08