【问题标题】:Joining 2 Count Query With Group By Clause使用 Group By 子句加入 2 个计数查询
【发布时间】:2016-02-05 06:38:51
【问题描述】:

我有 2 个查询
第一个是:

SELECT UserId, COUNT(CustomerId) AS Total
  FROM (SELECT *
          FROM Customer
         WHERE JoinYear = 2016 
           AND JoinMonth = 1
           AND JoinWeek = 2 
           AND JoinDay = 1) x
GROUP BY UserId

第二个是:

SELECT UserId, COUNT(CustomerId) AS Joined
  FROM (SELECT *
          FROM Customer
         WHERE JoinYear = 2016 
           AND JoinMonth = 1
           AND JoinWeek = 2 
           AND JoinDay = 1
           AND JoinStatus = 2) x
GROUP BY UserId

他们每个人都会产生

(first query)                (second query)

UserId | Total              UserId | Total
--------------              --------------  
   1   |  10                   1   |   2
   2   |  15                   2   |   5

我的问题是如何将它们加入到这样的表中?

Userid | Total | Joined
-----------------------
   1   |  10   |   2
   2   |  15   |   5

【问题讨论】:

  • 你可以试试这个SELECT x1.UserId, COUNT(x1.CustomerId) AS Total, COUNT(x2.CustomerId) AS Joined FROM (SELECT * FROM Customer WHERE JoinYear = 2016 AND JoinMonth = 1 AND JoinWeek = 2 AND JoinDay = 1) x1 LEFT JOIN (SELECT * FROM Customer WHERE JoinYear = 2016 AND JoinMonth = 1 AND JoinWeek = 2 AND JoinDay = 1 AND JoinStatus = 2) x2 ON x2.UserId = x1.UserId

标签: sql sql-server-2008 join count


【解决方案1】:

您的查询非常复杂,没有理由。

试试这个:

SELECT UserID, COUNT(*) Total, SUM(CASE WHEN JoinStatus = 2 THEN 1 END) Joined
FROM Customer
WHERE JoinYear = 2016 AND JoinMonth = 1 AND JoinWeek = 2 AND JoinDay = 1
GROUP BY UserID

这是一个 SQLFiddle 演示此技术。

每当您发现自己有嵌套子查询时,问问自己这是否真的是强制性的。

【讨论】:

  • 嘿,对不起,太专注于你的小提琴,这也是我寻找的目标
【解决方案2】:

其他选项:

select  UserID, count(Total) as Total, count(Joind) as Joined
from    (
            select  UserId,COUNT(CustomerId) as Total, cast(0 as int) as Joined
            from    Customer
            where   JoinYear = 2016 and JoinMonth = 1 and JoinWeek = 2 and JoinDay = 1
            group by    UserID
            union all
            select  UserId,
                    cast(0 as int) as Total, count(CustomerId) as Joined Customer
            where   JoinYear = 2016 and JoinMonth = 1 and JoinWeek = 2 and JoinDay = 1  and JoinStatus = 2
            group by    UserId
        ) x
group by    x.UserID

【讨论】:

  • 别着急,你的代码有一些错误,比如'JoinMonth = 1='等等
  • 如果你有想法和逻辑,我相信你可以纠正语法错误
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 2017-01-10
  • 2020-12-22
  • 2016-05-09
  • 2023-04-04
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
相关资源
最近更新 更多