繁体   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