聚合SQL结果,两个表,然后汇总结果
发布时间:2020-12-14 04:54:20 所属栏目:百科 来源:网络整理
导读:使用MSSQL 我有一个用户表,以及他们订阅的产品表.这些订阅是免费(F)或付费(P).我已经加入了表格,使用case语句将F / P值转换为数字,然后按用户ID对这些值进行求和,这个想法是任何只有免费帐户的人都会得到0,那些至少有一个付费帐户的值为1或更高.我已经用以下
使用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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |