我想按年份对一组日期记录进行分组,当日期为当天。类似的东西:
SELECT venue, YEAR(date) AS yr, SUM(guests) AS yr_guests
FROM Events
...
GROUP BY venue, YEAR(date);
以上是给我结果而不是错误,但结果不按年份和地点分组;他们似乎根本没有分组。
我的强力解决方案是嵌套子查询:将YEAR()AS yr添加为子查询中的额外列,然后在外部查询中对yr进行分组。我只是想在没有嵌套的情况下尽可能多地学习,因为嵌套通常看起来非常低效。
我会告诉你我正在使用的确切SQL实现,但我发现它时遇到了麻烦。 (我正在解决http://www.sql-ex.ru/上的问题,如果你能告诉他们正在使用什么,我很想知道。)编辑补充:在评论中进行测试,可能不是SQL Server。 / p>
编辑添加我得到的结果(注意前两个应该相加):
venue | yr | yr_guests
1 2012 15
1 2012 35
2 2012 12
1 2008 15
我希望前两行可以总结为
1 2012 50
答案 0 :(得分:1)
在SQL Server 2008中运行良好。
请参阅此处的工作示例:http://sqlfiddle.com/#!3/3b0f9/6
代码粘贴在下面。
创建活动表
CREATE TABLE [Events]
( Venue INT NOT NULL,
[Date] DATETIME NOT NULL,
Guests INT NOT NULL
)
插入行。
INSERT INTO [Events] VALUES
(1,convert(datetime,'2012'),15),
(1,convert(datetime,'2012'),35),
(2,convert(datetime,'2012'),12),
(1,convert(datetime,'2008'),15);
GO
-- Testing, select newly inserted rows.
--SELECT * FROM [Events]
--GO
运行GROUP BY Sql。
SELECT Venue, YEAR(date) AS yr, SUM(guests) AS yr_guests
FROM Events
GROUP BY venue, YEAR(date);
请参阅输出结果。
VENUE YR YR_GUESTS
1 2008 15
1 2012 50
2 2012 12
答案 1 :(得分:0)
它取决于您的数据库引擎(或SQL)
确保(通过不同的DB Systems& Versions),制作子查询
SELECT venue, theyear, SUM(guests) from (
SELECT venue, YEAR(date) AS theyear, guest
FROM Events
)
GROUP BY theyear
你制作
的子表格venue, date as theyear, guest
aaaa, 2001, brother
aaaa, 2001, bbrother
bbbb, 2001, nobody
... and so on
然后
算上他们