查询用户发布条目次数的最佳方法

问题描述

我有一张桌子,

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;