1

我想按年份对一组日期记录进行分组,日期为当天。就像是:

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。

编辑添加我得到的结果(注意前两个应该相加):

venue | yr   | yr_guests
1       2012   15
1       2012   35
2       2012   12
1       2008   15

我希望前两行改为总结为

1       2012   50
4

2 回答 2

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
于 2013-11-05T23:08:07.343 回答
0

这取决于您的数据库引擎(或 SQL)

确定(通过不同的数据库系统和版本),进行子查询

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

接着

数一数

于 2013-11-05T23:03:13.310 回答