[英]get sum of count of count postgres
我有兩個表的jobs
和users
。 用戶與工作具有一對多關系。
我想將用戶划分為Jobs_done組。 換句話說,有多少用戶執行了1個作業,2個作業,3個作業,等等。下面的查詢執行該操作。 但是,我想將所有完成3個或更多工作的用戶歸為一組。
這是我目前有的查詢
select
jobs_done,
count(1) as number_of_users
from ( select
u.id,
count(*) as jobs_done
from jobs j
JOIN users u on j.user_id = u.id
group by u.id ) a
group by jobs_done
電流輸出:
times_used number_of_users
1 255
2 100
3 30
4 10
5 9
所需輸出:
times_used number_of_users
1 255
2 100
3+ 49
您可以使用case
表達式將值3+分組為一個大組。 這應該工作:
select
case
when jobs_done >= 3 then '3+'
else cast(jobs_done as varchar(5))
end as jobs_done,
count(1) as number_of_users
from (
select
u.id,
count(*) as jobs_done
from jobs j
join users u on j.user_id = u.id
group by u.id
) a
group by case when jobs_done >= 3 then '3+'
else cast(jobs_done as varchar(5))
end;
您基本上可以將所有內容分組。 這是一個簡單的例子:
test=# SELECT CASE WHEN x < 4 THEN x::text ELSE '4+' END AS y,
count(*)
FROM generate_series(1, 10) AS x
GROUP BY y
ORDER BY 1;
y | count
----+-------
1 | 1
2 | 1
3 | 1
4+ | 7
(4 rows)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.