我有一张这样的表:
+--------+----------+------------+-----------+
| emp_id | emp_name | emp_salary | emp_grade |
+--------+----------+------------+-----------+
| 1 | EMP1 | 5000 | 1 |
| 2 | EMP2 | 4000 | 2 |
| 3 | EMP3 | 3000 | 3 |
| 4 | EMP4 | 2000 | 4 |
| 5 | EMP5 | 1000 | 5 |
+--------+----------+------------+-----------+
我想返回每个组的sum(emp_salary)
大于5000的组列表。
预期结果:
Group 1:
| 1 | EMP1 | 5000 | 1 | 9000
| 2 | EMP2 | 4000 | 2 | 9000
Group 2:
| 2 | EMP2 | 4000 | 2 | 7000
| 3 | EMP3 | 3000 | 3 | 7000
Group 3:
| 3 | EMP3 | 3000 | 3 | 6000
| 4 | EMP4 | 2000 | 4 | 6000
| 5 | EMP5 | 1000 | 5 | 6000
...
有没有办法实现这个目标?
答案 0 :(得分:1)
如果您拥有每个组的最大大小,那么您可以执行以下操作:
select e1.emp_name, e2.emp_name, e3.emp_name,
coalesce(e1.salary, 0) + coalesce(e2.salary, 0) + coalesce(e3.salary, 0) as salary
from employees e1 left outer join
employee2 e2
on e1.emp_name < e2.emp_name left outer join
employees e3
on e2.emp_name < e3.emp_name
where coalesce(e1.salary, 0) + coalesce(e2.salary, 0) + coalesce(e3.salary, 0)) > 5000;
这适用于3的组合。它将组合放在不同的列中,而不是放在不同的行中。
一般来说,对于SQL中的这种查询,您需要递归CTE或类似的东西 - 而且MySQL不支持这些。
答案 1 :(得分:0)
没有,您只能使用一个SELECT语句检索整个数据集,而不是几个集。
您需要检索所有数据并将其分组到应用程序中。