どのように私は最も活発な売り手(日あたりのユーザーごとのソフトウェアの販売数が最も多い)とチームを見つけることができますか?

ドリューファム:

どのように私は最も活発な売り手(日あたりのユーザーごとのソフトウェアの販売数が最も多い)とチームを見つけることができますか?私はこのクエリのようなものをやってみたかったが、それは静かな権利を感じていません

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

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=406110&siteId=1