我看到一个例子,其中有一份员工名单(表格)及其各自的月薪.我做了一笔工资,并在ouptput中看到完全相同的表!那很奇怪.
以下是必须要做的事情 - 我们必须找出这个月我们支付多少钱作为员工工资.为此,我们需要在数据库中汇总他们的工资金额,如图所示 -
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
Run Code Online (Sandbox Code Playgroud)
我知道如果我不在上面的代码中使用group by,我会收到错误.这是我不明白的 -
我们从employee表中选择employeeid.SUM()被告知它必须从Employee表中添加MonthlySalary列.因此,它应该直接添加这些数字而不是将它们分组然后添加它们.
这是一个人如何做到这一点 - 查看员工表并添加所有数字.为什么他会麻烦地把它们分组然后加起来?
Abe*_*ler 49
如果您将GROUP BY视为"为每个人",为了便于解释,可能会更容易.查询如下:
SELECT empid, SUM (MonthlySalary)
FROM Employee
GROUP BY EmpID
Run Code Online (Sandbox Code Playgroud)
说:
"给我每个 empid 的MonthlySalary的总和"
所以如果你的表看起来像这样:
+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1 |200 |
+-----+------------+
|2 |300 |
+-----+------------+
Run Code Online (Sandbox Code Playgroud)
结果:
+-+---+
|1|200|
+-+---+
|2|300|
+-+---+
Run Code Online (Sandbox Code Playgroud)
Sum似乎不会做任何事情,因为一个数字的总和就是那个数字.另一方面,如果它看起来像这样:
+-----+------------+
|empid|MontlySalary|
+-----+------------+
|1 |200 |
+-----+------------+
|1 |300 |
+-----+------------+
|2 |300 |
+-----+------------+
Run Code Online (Sandbox Code Playgroud)
结果:
+-+---+
|1|500|
+-+---+
|2|300|
+-+---+
Run Code Online (Sandbox Code Playgroud)
然后它会因为有两个empid 1来总结.不确定这个解释是否有帮助,但我希望它能让事情变得更加清晰.
如果你想要添加所有数字,你将没有GROUP BY:
SELECT SUM(MonthlySalary) AS TotalSalary
FROM Employee
Run Code Online (Sandbox Code Playgroud)
+-----------+
|TotalSalary|
+-----------+
|777400 |
+-----------+
Run Code Online (Sandbox Code Playgroud)
GROUP BY的要点是您为每位员工单独获得总额.
+--------+------+
|Employee|Salary|
+--------+------+
|John |123400|
+--------+------+
|Frank |413000|
+--------+------+
|Bill |241000|
+--------+------+
Run Code Online (Sandbox Code Playgroud)
可悲的是,有一个数据库支持您建议的语法:
SELECT EmployeeID, SUM (MonthlySalary)
FROM Employee
Run Code Online (Sandbox Code Playgroud)
但是,MySQL 并没有按照您的预期执行。它返回每个人的 MonthlySalary 的总和,以及一个任意的 EmployeeId。唉。
您的问题是关于 SQL 语法的。答案是 SQL 是如何定义的,并且不会改变。从SELECT子句中确定聚合字段并非不合理,但这不是这种语言的定义方式。
不过,我对这个问题有一些同情。许多学习 SQL 的人认为“分组”是在对行进行排序的上下文中完成的。类似于“对美国的城市进行排序并在输出中按州对它们进行分组”。说得通。但是 SQL 中的“分组依据”实际上意味着“汇总依据”而不是“保持在一起”。
| 归档时间: |
|
| 查看次数: |
24672 次 |
| 最近记录: |