如何找到销售最活跃的团队(每位用户每天最多的软件销售数量)? 我想做类似这样的查询,但感觉并不安静
SELECT users.team_id, count(*) as sales FROM users
INNER JOIN activity ON users.user_id = activity.user_id
WHERE activity.sales = software
GROUP BY users.team_id
ORDER BY sale DESC
我的用户表如下:
user_id team_id
0 62
1 32
2 21
我的活动表如下:
user_id sale_date sale
1 2019-05-02 11:02:39 hardware
2 2018-05-02 11:02:53 software
2 2019-06-02 11:42:33 software
答案 0 :(得分:2)
听起来这是一个分步查询,所以让我们从最里面的部分开始:获取每个用户每天的销售量。
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
然后我们可以get the most active user for each day:
SELECT DISTINCT ON (sale_date) sale_date, user_id
FROM (
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
) AS counts_by_date_and_user
ORDER BY sale_date, sales -- consider breaking ties somehow
然后,我们可以计算出一天中用户最活跃的频率,并以此排序并获取其团队ID。
SELECT team_id, user_id, count(*) as days
FROM (
SELECT DISTINCT ON (sale_date) sale_date, user_id
FROM (
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
) AS counts_by_date_and_user
ORDER BY sale_date, sales -- consider breaking ties somehow
) AS most_active
JOIN users USING (user_id)
GROUP BY user_id
ORDER BY days DESC