SQL - 按一个字段分组并汇总另一个字段?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL - 按一个字段分组并汇总另一个字段?相关的知识,希望对你有一定的参考价值。
我有一个数据库,其中包含有关我网站上的项目的页面查看的数据。每行都有Date,ItemId(guid字符串)和Views(int)。在不同日期有许多行具有相同的ItemId。我想用视图的总和将所有这些聚合成一行。例如:
Date |ItemId |Views
2017-12-18 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
2017-12-17 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |3
2017-12-12 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |5
2017-12-07 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1
我想得到以下内容:
ItemId | Views
6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB | 10
另外,我需要能够按日期过滤,比如WHERE [Date] between '12/15/2017' and GetDate()
Where子句很简单,但如何进行分组/求和?请记住,我不是只汇总一个ItemId,我想将ItemId相同的所有行分组,以便我可以得到每个项目的视图总和。
答案
只需使用GROUP BY
:
SELECT
ItemId,
SUM(Views) AS Views
FROM yourTable
WHERE [Date] BETWEEN '2017-12-15' AND GETDATE()
GROUP BY ItemId;
附注,但here is a link到MSDN文档描述什么是SQL Server的有效日期/时间文字。我更喜欢使用上面给出的ISO格式,但你使用的m/d/y
也是有效的。
另一答案
我认为您需要一个子查询,以便WHERE子句限制不会更改整体视图计数。如下的东西:
SELECT
ItemId,
sum(Views) as viewCount
FROM table t1
WHERE exists (Select itemid From table t2 Where t2.itemid = t1.itemid and [Date] BETWEEN '2017-12-15' AND GETDATE())
GROUP BY ItemId;
以上是关于SQL - 按一个字段分组并汇总另一个字段?的主要内容,如果未能解决你的问题,请参考以下文章