【问题标题】:MySQL Case CountMySQL 案例计数
【发布时间】:2015-03-10 03:39:47
【问题描述】:

您好,我对如何执行此查询感到困惑。

我有桌子:

transactiondetails
-> TransactionDetailsID
-> TerminalID
-> SiteID
-> TransactionType
-> Amount

terminals
-> TerminalID
-> TerminalName
-> TerminalType

现在,在 table terminal.TerminalType 上,值是 0 或 1。 在我的 transactiondetails 中,我需要在表中的特定 SiteID 中找到终端总数。TerminalType = 1 transactiondetails 所以我的查询是

SELECT 
CASE 
WHEN b.TerminalType IN (1) then COUNT(a.TerminalID)
ELSE 0 END AS TotalGenesis, a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167;

但即使我的交易详情中有 TerminalType = 1,TotalGenesis 的结果也为零。

感谢您的帮助。

【问题讨论】:

  • 在MySQL中你可以写COUNT (TerminalType = 1)

标签: mysql count case


【解决方案1】:

使用此查询。而不是使用IN 使用等号(=)。见下文:

SELECT 
      CASE 
          WHEN b.TerminalType = 1 THEN COUNT(a.TerminalID)
          ELSE 0 
      END AS TotalGenesis, 
      a.SiteID
FROM npos.transactiondetails a
LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
WHERE a.SiteID = 167;

【讨论】:

    【解决方案2】:

    也许连接失败了?这将导致它返回零。你确定 TerminalType 不为空吗?

    这些查询中的任何一个都返回正确的结果吗?

    SELECT 
        CASE
            WHEN b.TerminalType IN (1) then COUNT(a.TerminalID)
            ELSE 0
        END AS TotalGenesis,
        a.SiteID
    FROM npos.transactiondetails a
    LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
    WHERE a.SiteID = 167
    GROUP BY a.SiteID;
    
    SELECT 
        SUM(CASE
            WHEN b.TerminalType IN (1) then 1
            ELSE 0
        END) AS TotalGenesis,
        a.SiteID
    FROM npos.transactiondetails a
    LEFT JOIN npos.terminals b ON a.TerminalID = b.TerminalID 
    WHERE a.SiteID = 167;
    

    无论哪种方式,您似乎都想要内连接而不是左连接。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多