gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:40:47 25 4
gpt4 key购买 nike

使用MSSQL

我有一个用户表和一个他们订阅的产品表。这些订阅可以是免费 (F) 或付费 (P)。我已经加入了表格,使用 case 语句将 F/P 值转换为数字,然后按用户 ID 对这些值进行求和,其想法是,任何仅拥有免费帐户的人的总和将为 0,那些至少拥有 1 个帐户的人的总和为 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;

关于sql - 聚合 SQL 结果,两个表,然后汇总结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com