【问题标题】:Counting the amount of 0's in MySQL计算 MySQL 中 0 的数量
【发布时间】:2021-06-21 18:41:23
【问题描述】:

我想计算表中零/假的数量,因为en_participationBoolean 变量。但是我抬起头来,当我在SELECT 语句中将0 替换为1 时,它可以正常工作,但是当我将它替换为0 时,它给了我相同的结果。

任何帮助将不胜感激

SELECT count(CASE WHEN en_participation THEN 0 END) FROM Enrolls

【问题讨论】:

  • 您好,请编辑问题并发布minimal reproducible example,包括表定义和示例数据
  • 将计数更改为总和。天气你数1或0,计数将相同。如果你 SUM 1 或 0。它会有所作为。

标签: mysql database count boolean-logic


【解决方案1】:

计算 0 的最简单方法是求和:

SELECT SUM(NOT en_participation) AS count_zeros,
       SUM(en_participation) AS count_ones
FROM Enrolls

这里,表达式NOT en_participation 将 0 变为 1,将 1 变为 0

【讨论】:

    【解决方案2】:

    你没有告诉它在事情不匹配的情况下该怎么做:

    SELECT COUNT(CASE
                   WHEN not en_participation
                     THEN 0
                     ELSE NULL
                 END) AS TOTAL_COUNT
      FROM Enrolls
    

    零是一个可数的值。 NULL 不是。

    See this db<>fiddle

    编辑

    经过一个晚上的思考,我正在修改我的答案。它没有任何问题,但它没有达到预期的那么好。

    问题中的问题和我的原始答案是不清楚到底是什么被计算在内。我们计算的是 FALSE,是的 - 但在 en_participation 为 FALSE 的情况下,我们返回 0,虽然这 一个可数值,但很容易误解它。因此,我想出了以下内容:

    SELECT COUNT(CASE en_participation
                   WHEN true THEN 1
                   WHEN false THEN NULL
                 END) AS TRUE_COUNT,
           COUNT(CASE en_participation
                   WHEN true THEN NULL
                   WHEN false THEN 1
                 END) AS FALSE_COUNT
      FROM Enrolls
    

    See this db<>fiddle for the improved answer

    问题和我的原始答案也返回 0 作为可数值。这是正确的,但乍一看可能会令人困惑。对于我认为更好的可数行,我更新的答案返回 1。

    (对于那些想知道“这家伙怎么有时间做这件事的人?” - 我正在家里从膝关节置换手术中恢复过来,所以我很无聊而且很受伤,这让我分心了。:-)

    【讨论】:

    • ELSE NULL 是默认值;如果你忽略它,case 仍然会产生 NULL。但它并没有什么坏处,有些人可能会发现它更清楚。
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 2012-09-26
    • 1970-01-01
    • 2018-06-18
    • 1970-01-01
    相关资源
    最近更新 更多