ドリューファム:
どのように私は最も活発な売り手(日あたりのユーザーごとのソフトウェアの販売数が最も多い)とチームを見つけることができますか?私はこのクエリのようなものをやってみたかったが、それは静かな権利を感じていません
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テーブルは次のようになります。
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
ベルク:
これは、ステップバイステップのクエリであるように聞こえる、それでは、最奥部で小さく始めてみましょう:1日あたりのユーザーごとの販売数を取得します。
SELECT sale_date, user_id, count(*) as sales
WHERE sale = 'software'
GROUP BY sale_date, user_id
その後、我々はできる、毎日のための最もアクティブなユーザーを取得します:
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