来自Grouped查询的Sum SQL Server Count列

时间:2016-01-27 20:17:37

标签: sql sql-server sql-server-2008 sql-server-2005

我正在尝试编写一个查询,该查询从我的数据库中获取评级高于3星的所有内容,并根据星级平均值和最高评级数返回前四个模块。这部分效果很好。

但是为了让我把它放到图表中,我需要百分比。所以,我需要count(id_module)列的摘要。我已经阅读了很多帖子并试图实施一些解决方案,但没有成功 - 任何人都可以为我提供任何帮助吗?我在下面粘贴了我的查询及其带来的结果 - 这部分工作正常......我只需要知道如何获取id模块字段的总和 - 在这种情况下将是23 ...感谢任何帮助提供!

SELECT TOP 4 
    AVG(rating) AS ratingstars, 
    COUNT(id_module) AS countmodules,  
FROM 
    [db]
WHERE 
    (rating > 3)
GROUP BY 
    id_module 
ORDER BY 
    ratingstars DESC, countmodules DESC
  • ratingstars = 5,5,5,5
  • countstar = 18,2,2,1(需要这些的总和)

3 个答案:

答案 0 :(得分:1)

在SQL Server 2008+中,您可以使用_secondaryCallback。我不确定它是否在SQL Server 2005中可用。

SUM() OVER()

答案 1 :(得分:0)

可能是这个或子选择:

SELECT ratingstars, SUM(countmodules) as [countmodules] FROM
(
SELECT TOP 4 AVG(rating) AS ratingstars, COUNT(id_module) AS countmodules,FROM   [db],
WHERE 
(rating > 3)
GROUP BY id_module) X
GROUP BY X.ratingstars
ORDER BY X.ratingstars DESC, X.countmodules DESC

答案 2 :(得分:0)

SELECT TOP 4 
    AVG(rating) AS ratingstars, 
    COUNT(*) AS countmodules,
    SUM(COUNT(*)) OVER () AS allmodules /* <-- OVER () makes the double aggregate "ok" */
FROM 
    [db]
WHERE 
    rating > 3
GROUP BY 
    id_module 
ORDER BY 
    ratingstars DESC, countmodules DESC

请注意,这并不会将总和限制在前四行,因为我已经意识到您可能想要这样做。