sql - 为什么我们需要带有聚合函数的 GROUP BY?

标签 sql

我看到一个例子,其中有一个员工列表(表)及其各自的月薪。我对工资进行了汇总,并在输出中看到了完全相同的表格。这很奇怪。

这是必须做的 - 我们必须找出本月我们支付多少员工工资。为此,我们需要在数据库中对他们的工资金额进行求和,如下所示:

SELECT EmployeeID, SUM (MonthlySalary) 
FROM Employee
GROUP BY EmpID

我知道如果我在上面的代码中不使用GROUP BY,就会收到错误。这是我不明白的地方。

我们从 Employee 表中选择 EmployeeID。 SUM() 被告知必须从 Employee 表添加 MonthlySalary 列。因此,它应该直接将这些数字相加,而不是先将它们分组然后相加。

这就是一个人会做的事情 - 查看员工表并将所有数字相加。他们为什么要费尽心思将它们分组然后将它们相加?

最佳答案

为了便于解释,如果您将 GROUP BY 视为“对于每个”,可能会更容易。查询如下:

SELECT empid, SUM (MonthlySalary) 
FROM Employee
GROUP BY EmpID

意思是:

“给我每个 empid 的月薪总和”

如果您的表格如下所示:

+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1    |200         |
+-----+------------+
|2    |300         |
+-----+------------+

结果:

+-+---+
|1|200|
+-+---+
|2|300|
+-+---+

Sum 似乎不会执行任何操作,因为一个数字的总和就是该数字。另一方面,如果它看起来像这样:

+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1    |200         |
+-----+------------+
|1    |300         |
+-----+------------+
|2    |300         |
+-----+------------+

结果:

+-+---+
|1|500|
+-+---+
|2|300|
+-+---+

那就会了,因为有两个 empid 1 需要相加。不确定这个解释是否有帮助,但我希望它能让事情变得更清楚。

关于sql - 为什么我们需要带有聚合函数的 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998552/

相关文章:

sql - 是否有任何免费工具可以在 MS SQL Server 中生成 'INSERT INTO' 脚本?

sql - 如何在没有过程的情况下使用一系列日期连接表

mysql - 在多 (1-n) 关系表上搜索

java - 覆盖 jOOQ 对 UpdatableRecords 的异常处理

php - 如何使用 PHP 在 mysql 中编写以下查询

mysql - MySQL中如何计算反向运行和

sql - Symfony2 Orderby特定字段值优先

mysql - 无法删除 MySQL 表

php - 根据原始SQL结果获取额外数据

c# - 使用 System.Data.SQLite.Linq 时生成错误的 SQL 语句