【问题标题】:Can I use a case statement like this?我可以使用这样的案例陈述吗?
【发布时间】:2012-08-01 13:27:50
【问题描述】:

我目前无权对此进行测试,但没有找到任何相关示例。 我想尝试这样的事情:

SELECT member.name, DISTINCT member.id, 
     COUNT(CASE WHEN member.code = 'A' 
     THEN 1) AS CountACode, ... CountBCode, COUNT(*) as CountTotal  FROM member

我知道我可以以不同的方式执行此操作,但我已经在使用其他一些相关的列,这样做会容易得多。但是,我相信有人告诉我我错了,但没有任何说明原因。有人介意告诉我问题出在哪里吗?

【问题讨论】:

  • case 语句本身很好(减去缺少的END)。

标签: mysql count case


【解决方案1】:

您不能在其之间写入DISTINCT 子句,它必须立即在SELECT 子句之后。

是的,您可以在COUNT 中使用CASE WHEN 语句:

SELECT DISTINCT member.name,  member.id, 
       COUNT(CASE WHEN member.code = 'A' THEN 'something..' END) AS CountACode, 
       ... CountBCode, 
       COUNT(*) as CountTotal 
FROM member;

【讨论】:

    【解决方案2】:

    您的问题是DISTINCT,它适用于整个结果集,而不仅仅是单个字段。

    对于计数,我们的正常模式是SUM

    SUM(CASE WHEN Condition = value THEN 1 ELSE 0 END)
    

    【讨论】:

      【解决方案3】:
      SELECT member.name, member.id, SUM(CASE WHEN member.code = 'A' THEN 1 ELSE 0) AS CountACode, ... CountBCode, COUNT(*) as CountTotal
      FROM member
      GROUP BY member.name, member.id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 2012-06-13
        • 2023-04-10
        • 2010-10-30
        相关资源
        最近更新 更多