是否有可能将Group by,Having和Sum结合起来?

S.o*_*ork 8 sql group-by having

我有一张桌子:

------------------------
|id|p_id|desired|earned|
------------------------
|1 | 1  |  5    |  7   |
|2 | 1  |  15   |  0   |
|3 | 1  |  10   |  0   |
|4 | 2  |  2    |  3   |
|5 | 2  |  2    |  3   |
|6 | 2  |  2    |  3   |
------------------------
Run Code Online (Sandbox Code Playgroud)

我需要进行一些计算,并尝试在一个非常复杂的请求中进行计算,否则我知道如何使用请求数来计算它.我需要结果表如下:

---------------------------------------------------------
|p_id|total_earned|    AVG   |      Count     |  SUM    |
|    |            | (desired)|(if earned != 0)|(desired)|
---------------------------------------------------------
|  1 |      7     |     10   |       1        |    30   |
|  2 |      9     |      2   |       3        |    6    |
---------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我到目前为止构建:

SELECT p_id, SUM(earned), AVG(desired), Sum(desired) 
FROM table GROUP BY p_id
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何计算有条件的分组记录数.我可以用HAVING分开的请求得到这个号码.

我几乎可以肯定SQL应该拥有这种能力.

Din*_*hDB 12

您可以使用CASE表达式.

试试这个,

SELECT p_id
    ,SUM(earned) AS total_earned
    ,AVG(desired) AS avg_desired
    ,COUNT(CASE WHEN Earned!=0 THEN 1 END) AS earned_count
    ,SUM(desired) AS sum_desired
FROM table
GROUP BY p_id;
Run Code Online (Sandbox Code Playgroud)