我看到一个例子,其中有一份员工名单(表格)及其各自的月薪。我做了一笔工资,并在ouptput中看到完全相同的表!那很奇怪。
以下是必须做的事情 - 我们必须找出这个月我们支付多少钱作为员工工资。为此,我们需要在数据库中汇总其工资金额,如图所示 -
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
我知道如果我在上面的代码中不使用group by,我会收到错误。这是我不明白的 -
我们从员工表中选择employeeid。 SUM()被告知它必须从Employee表中添加MonthlySalary列。因此,它应该直接添加这些数字而不是将它们分组然后添加它们。
这是一个人如何做到这一点 - 查看员工表并添加所有数字。为什么他会麻烦地把它们分组然后加起来?
答案 0 :(得分:47)
为了解释起见,将GROUP BY视为“为每个人”可能会更容易。查询如下:
SELECT empid, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
说:
“每个 empid为我提供MonthlySalary的总和”
所以如果你的表看起来像这样:
+-----+------------+
|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来总结。不确定这个解释是否有帮助,但我希望它能让事情变得更加清晰。
答案 1 :(得分:7)
如果你想加上你没有GROUP BY的所有数字:
SELECT SUM(MonthlySalary) AS TotalSalary
FROM Employee
+-----------+
|TotalSalary|
+-----------+
|777400 |
+-----------+
GROUP BY的要点是每个员工都有一个单独的总额。
+--------+------+
|Employee|Salary|
+--------+------+
|John |123400|
+--------+------+
|Frank |413000|
+--------+------+
|Bill |241000|
+--------+------+
答案 2 :(得分:4)
令人遗憾的是,有一个数据库支持您建议的语法:
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
但是,MySQL 不做你期望的事情。它返回每个人的MonthlySalary的总和,以及一个任意的EmployeeId。唉。
您的问题是关于SQL语法。答案是SQL是如何定义的,它不会改变。确定SELECT
子句中的聚合字段并非不合理,但不是这种语言的定义方式。
答案 3 :(得分:2)
如果未指定GROUP BY
,则聚合函数将对所有选定的记录进行操作。在这种情况下,选择像EmployeeID
这样的特定列也没有意义。您希望每个员工总数,在这种情况下,您按员工选择员工ID和组,或者您希望整个表中的总计,所以您省略了员工ID和GROUP BY
子句。
在您的查询中,如果省略GROUP BY
,您希望显示哪个员工ID?