问题描述
我有一张桌子,
Column | Type
id integer
job_id integer
user_id integer
date_posted datetime
我想编写一个查询,以细分一次发布工作的用户数量与多次发布至少一项工作的用户数量
with user_jobs as (
select user_id,job_id,count(distinct date_posted) as num_posted
from table
group by user_id,job_id
)
Select SUM(Case when avg_num_posted > 1 then 1 end) as posted_multiple_times,SUM(Case when avg_num_posted = 1 then 1 end) as posted_once
FROM(
Select user_id,avg(num_posted) as avg_num_posted
from user_jobs
Group by user_id) t
解决方法
如果我的理解正确,您可以将不同的作业数量与作业/日期组合的数量进行比较。让我假设一个作业永远不会在同一日期发布两次。如果是这样的话:
Select sum(case when num_listings > num_jobs then 1 end) as posted_multiple_times,sum(case when num_listings = num_jobs then 1 end) as posted_once
from (select user_id,count(*) as num_listings,count(distinct job_id) as num_jobs
from t
group by user_id
) u;
如果作业可以一天发布两次,并且您不想将其视为重复,那么一种方法是:
Select sum(case when num_listings > num_jobs then 1 end) as posted_multiple_times,count(distinct job_id) as num_jobs
from (select distinct user_id,job_id,date_posted from t) t
group by user_id
) u;