查找总和大于预定义值的所有可能组

时间:2014-02-19 14:14:46

标签: mysql sql

我有一张这样的表:

+--------+----------+------------+-----------+
| 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

...

有没有办法实现这个目标?

2 个答案:

答案 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语句检索整个数据集,而不是几个集。

您需要检索所有数据并将其分组到应用程序中。