作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到一个例子,其中有一个员工列表(表)及其各自的月薪。我对工资进行了汇总,并在输出中看到了完全相同的表格。这很奇怪。
这是必须做的 - 我们必须找出本月我们支付多少员工工资。为此,我们需要在数据库中对他们的工资金额进行求和,如下所示:
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/
我是一名优秀的程序员,十分优秀!