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)