【问题标题】:How to have conditional group by in sql?如何在sql中进行条件分组?
【发布时间】:2015-03-23 06:24:06
【问题描述】:

我有一个包含这些列的表格:

tblTransaction 
(
    Transaction_ID, 
    Transaction_RequestTransactionCode,
    Transaction_MobileErrorCode
)

我想统计每笔交易的数量,它的 MobileErrorCode 为 0。

所以我的查询是这样的:

SELECT        Transaction_RequestTransactionCode, COUNT(Transaction_ID) AS _Count
FROM          tblTransaction
WHERE        (Transaction_MobileErrorCode = '0')
GROUP BY Transaction_RequestTransactionCode

结果是这样的:

它没有任何错误,但不是我的结果。当一个事务代码具有条件(Transaction_MobileErrorCode = '0')时,它会出现在_Count = 0的结果中。

我的意思是这个结果,最后一个原始的:

【问题讨论】:

  • 如果是 SQLServer 问题,请在您的问题中添加“sql-server”标签,谢谢。

标签: sql-server


【解决方案1】:

要执行条件聚合,使用 case 语句聚合将条件从 where 子句移动到 Count

SELECT Transaction_RequestTransactionCode,
       Count(CASE
               WHEN Transaction_MobileErrorCode = '0' THEN Transaction_ID
             END) AS _Count
FROM   tblTransaction
GROUP  BY Transaction_RequestTransactionCode 

【讨论】:

  • Count 不能使用条件。它计算所有不是null,无论是0 还是1
  • @juergend - 真的!!这不是真的检查这里stackoverflow.com/questions/1288058/…
  • 我刚刚检查过了。你说得对。我也是 :) 您可以使用条件,但必须确保 false 部分是 null
  • @juergend 由于我们没有使用 else 部分是 case 语句,所有其他值将是 NULL 并且不会被计算在内
【解决方案2】:

sum总结你要统计的条件

SELECT        Transaction_RequestTransactionCode, 
              SUM(case when Transaction_MobileErrorCode = '0' then 1 else 0 end) AS _Count
FROM          tblTransaction
GROUP BY Transaction_RequestTransactionCode

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-08
    • 2013-04-12
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2023-01-09
    相关资源
    最近更新 更多