簡體   English   中英

如何:來自互斥的多個 CTE 的 SELECT

[英]How to: SELECT from multiple CTEs that are mutually exclusive

我處於一種情況,我需要根據用戶進行的推薦顯示用戶的統計信息,然后顯示有關這些被推薦用戶活動的統計信息。 因此,如果用戶 A 引用用戶 B,C 則表示用戶 A 引用了 2 個用戶。 現在,我需要知道有多少referred的用戶確實采取了行動,即購買。 但是他們可能不會購買計數為 0 的東西。我使用 CTE 進行了以下查詢,它確實按預期工作,但它也返回了一些假陰性結果。 IE


    WITH direct_referrals AS (
        SELECT id
        FROM "user"
        WHERE "user"."referredBy" = ${userId}
    ),
    application_stats AS (
        SELECT count(status), status
        FROM "application"
        WHERE "userId" IN (SELECT id FROM direct_referrals)
        GROUP BY status
    )
          
    SELECT *, (SELECT count(id) FROM direct_referrals) AS "totalReferrals" 
    FROM application_stats;

如果至少有 1 個被推薦的用戶采取了一些操作,則此查詢返回正確的結果,但當沒有人采取任何操作時它會失敗,在這種情況下,此查詢將referred的用戶返回為 0,這是不正確的。

我可以看到SELECT依賴於application_stats CTE,它可能不會返回任何結果,因此也不會返回direct_referrals 我對 SQL 有點陌生,所以真的不知道很多選擇。 任何幫助表示贊賞。

謝謝

更新樣本數據和預期結果

// 用戶 model

Id    username    referredBy
----  --------  -------------------
1     jon       NULL
2     jane      1
3     doe       1
4     smith     2
5     john      1

// 應用 model

Id    userId    status
----  --------  -------------------
1     12       'APPLIED'
2     13       'APPLIED'
3     14       'VIEWED'

預期結果(對於 userId = 1):

User (referral) stats  Application stats
-------------------    -------------------
3                      0

實際結果:

User (referral) stats  Application stats
-------------------    -------------------
0                      0

像這樣的東西應該給你你想要的:

WITH REFERRAL AS (
    SELECT REFERREDBY, COUNT(USERNAME) AS "REF_CNT"
    FROM  USER_MODEL
    WHERE REFERREDBY IS NOT NULL
  GROUP BY REFERREDBY
),
APPLICATIONS AS (
    SELECT UM.REFERREDBY, COUNT(ML.APPL_STATUS) AS "APPL_CNT"
    FROM USER_MODEL UM
    LEFT OUTER JOIN APPLICATION_MODEL ML ON UM.ID = ML.USER_ID AND ML.APPL_STATUS = 'PURCHASED'
    GROUP BY UM.REFERREDBY
)
SELECT R.REFERREDBY, R.REF_CNT, A.APPL_CNT
FROM REFERRAL R
LEFT OUTER JOIN APPLICATIONS A ON R.REFERREDBY = A.REFERREDBY;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM