微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

聚合SQL结果,两个表,然后汇总结果

使用MSsql

我有一个用户表,以及他们订阅的产品表.这些订阅是免费(F)或付费(P).我已经加入了表格,使用case语句将F / P值转换为数字,然后按用户ID对这些值进行求和,这个想法是任何只有免费帐户的人都会得到0,那些至少有一个付费帐户的值为1或更高.我已经用以下方法做到了这一点:

SELECT t1.user_id,SUM(
    CASE
        WHEN t2.free_paid = 'P'
            THEN 1
        ELSE 0
    END ) as highest
FROM users t1 INNER JOIN accounts t2
    ON t1.user_id = t2.user_id
WHERE t2.account = 'A'
GROUP BY t1.user_id
ORDER BY t1.user_id

这会产生如下结果:

755   2
1259  2
2031  1
3888  0

意味着除3888以外的所有人都至少拥有一个付费帐户.

但是现在我想简单地添加它们以获得我们的两个值,一个是至少有一个付费帐户的用户数(例如3个),以及只有免费帐户的用户数(例子中为1).

我尝试声明两个变量,例如@free和@paid并使用case语句通过将它包装在上面并将其视为子查询添加到这些值,但我无法运行.

有任何想法吗?

解决方法

重新使用问题中的查询,您可以创建CTE(或子查询)并聚合结果:

;WITH CTE_UserAccounts AS (
    SELECT t1.user_id,SUM(
        CASE
            WHEN t2.free_paid = 'P'
                THEN 1
            ELSE 0
        END ) as highest
    FROM users t1 INNER JOIN accounts t2
        ON t1.user_id = t2.user_id
    WHERE t2.account = 'A'
    GROUP BY t1.user_id
)
SELECT
    COUNT(CASE WHEN highest > 0 THEN 1 END) AS [Paid],COUNT(CASE WHEN highest = 0 THEN 1 END) AS [Free]
FROM 
    CTE_UserAccounts;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐