我看到一个例子,其中有一个员工列表(表)及其各自的月薪。我对工资进行了汇总,并在输出中看到了完全相同的表格。这很奇怪。
这是必须做的 - 我们必须找出本月我们支付多少员工工资。为此,我们需要在数据库中对他们的工资金额进行求和,如下所示:
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/