【发布时间】:2017-09-28 16:15:24
【问题描述】:
我在使用 GROUP BY 子句时遇到了一些问题。我最初是在 MySQL 中学习 SQL,最近我转移到了 SQL Server。但是,我真的在 GROUP BY 子句上苦苦挣扎。
我习惯于创建查询,例如:
SELECT Name,Team,Date, SUM(Figure)
FROM Table
GROUP BY Name
这会给我一个结果,例如:
Name Team Date Figure
Ben 2 16/09 30
Simon 4 16/09 55
但是当我在 SQL Server 中编写相同的代码时,我必须对我的 select 子句中的所有列进行 GROUP BY,否则会出错
SELECT Name,Team,Date, SUM(Figure)
FROM Table
GROUP BY Name,Team,Date
结果:
Name Team Date Figure
Ben 2 16/09 10
Ben 2 19/09 20
Simon 4 16/09 35
Simon 4 20/09 20
这是因为它是按名称、团队和日期分组的。
我希望在 SQL Server 中获得类似于我在 MySQL 中的结果,但这似乎是不可能的。有人对这种情况有什么建议吗?
谢谢
【问题讨论】:
-
您的 MySQL 查询不应该运行。这没有任何意义。 MySQL 如何决定为 Ben 选择 Date 16/09 而不是 19/09?
-
MySQL 只会在严格模式下抱怨,但是是的,第一个查询是错误的。
-
在除 MySQL 之外的任何其他 dbms 中,您的第一个查询将失败,因为它没有意义。
-
我明白这没有意义,为什么但 MySQL 曾经让该查询运行
-
@RyanGadsdon 要合并给定列的数据而不专门对其进行分组(如您的情况下的
date),那么您需要告诉 SQL 如何 合并它。正如您在figure列中看到的那样,SQL 知道它应该如何为每个组组合Figure,因为您使用了 聚合查询 - 您已经说过 “对于每个组,SUM此栏目”。对于日期,您可以使用MIN(Date)表示最早的日期或使用MAX(Date)表示最大的日期。
标签: mysql sql sql-server group-by