SQL:GROUP BY可以将表达式包含为字段吗?

时间:2013-11-05 22:30:04

标签: sql group-by

我想按年份对一组日期记录进行分组,当日期为当天。类似的东西:

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

2 个答案:

答案 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

然后

算上他们