SQL Server如何获取列中唯一值的数量和每个值的平均分数?
我有一张这样的桌子SQL Server如何获取列中唯一值的数量和每个值的平均分数?,sql,sql-server,count,average,Sql,Sql Server,Count,Average,我有一张这样的桌子 city metric_name metric_value id Berlin likes 1 1a Berlin dislikes 2 1a Berlin comments 3 1a Berlin likes 4 1b Ber
city metric_name metric_value id
Berlin likes 1 1a
Berlin dislikes 2 1a
Berlin comments 3 1a
Berlin likes 4 1b
Berlin dislikes 5 1b
Berlin comments 3 1b
Hamburg likes 1 1c
Hamburg dislikes 2 1c
Hamburg comments 3 1c
Hamburg likes 2 1d
Hamburg dislikes 4 1d
Hamburg comments 5 1d
等等
My ideal result is this
city city_count_unique average_metric_score
Berlin 2 3 (sum metric_value / sum metric_names)
Hamburg 2 2,8
我所做的
我得到了每个城市的不同计数和平均度量值
SELECT AVG(T.metric_value), T.city,
COUNT(*) AS 'city_count_unique'
FROM
(SELECT DISTINCT metric_value, city
FROM dbo.Table) as T
GROUP BY T.city
但这是错误的
谢谢你的帮助
更新
另外还有一个varchar格式的列id,这里的答案取决于以下假设: 每个“组”(即喜欢、不喜欢)都有3个度量 (附件和评论) 如果该假设是正确的,则以下内容将输出您要查找的内容:
SELECT city,
COUNT(metric_name) / 3 AS city_count_unique,
CAST(SUM(metric_value) AS FLOAT) / COUNT(metric_value) AS average_metric_score
FROM #Table
GROUP BY city
输出:
city city_count_unique average_metric_score
Berlin 2 3
Hamburg 2 2.83333333333333
这是如何工作的?
通过按城市分组,我们将每个城市的结果分别合并
metric\u name
的计数给出了该城市的总指标(在您的示例中为6)。我将其除以3,得到唯一计数(基于我所述的假设)
如果每个城市的度量值的总和除以度量值的数量,则计算平均度量值得分
(柏林为18/6)。将
转换为浮点的原因是允许浮点答案。如果您喜欢使用CONVERT
而不是CAST
,也可以使用CONVERT
在OP更新后编辑问题
OP编辑了该问题,以指示存在允许检测度量分组的ID列。这是一个更新,使用它,而不是假设每个组总是有3个指标
SELECT city,
COUNT(id) AS city_count_unique,
CAST(SUM(metric_value_total) AS FLOAT) / SUM(metric_value_count) AS average_metric_score
FROM (
SELECT city,
id,
SUM(metric_value) metric_value_total,
COUNT(metric_value) AS metric_value_count
FROM #Table
GROUP BY city, id
) a
GROUP BY city
你似乎想要:
SELECT city,
COUNT(DISTINCT id) as city_count_unique,
AVG(metric_value * 1.0) as average_metric_score
FROM t
GROUP BY city;
您好,不幸的是,度量的数量可能会有所不同(@AnnaDmitrieva在这种情况下,你怎么知道有多少?有没有办法计算它?我更新了问题,有一个id列,就像我必须计算每个城市的id一样,但从来没有使用过SQL,不知道如何将所有的id组合在一起view@AnnaDmitrieva我已经根据你提供的新信息更新了答案