【发布时间】:2021-09-06 18:12:21
【问题描述】:
我写标题的时间比写这篇文章的时间还多,哈哈。我希望这是有道理的。
我不确定这是否可行,但我有一个声明,我需要使用 GROUP BY status 和 FIELD(status, 'value1', 'value2', 'value3', 'value4', 'value5') 计算具有特定值的总记录数。
问题是在我的FIELD 值(value1,value2...)中,该值可能不存在于任何记录中,因此我需要计数返回 0
SELECT COUNT(*),status FROM table WHERE some_field = 12345 GROUP BY status ORDER BY FIELD(status, 'value1', 'value2', 'value3', 'value4', 'value5');
返回
|COUNT(*)|status|
|3 |value1|
|9 |value2|
|12 |value3|
|34 |value5|
正如您所见,它对所有记录的计数都很好,但问题是任何记录中都没有value4,因此它什么也不返回。我需要它做的是返回
|COUNT(*)|status|
|3 |value1|
|9 |value2|
|12 |value3|
|0 |value4|
|34 |value5|
我也搞砸了IFNULL(COUNT(*), 0) 和IFNULL(status, 0),但它返回的结果与缺失值相同。基本上,我需要指定我要查找的值,如果不存在则返回 0。
我也尝试了HAVING status = 'value1' OR status = 'value2' OR status = 'value3' OR status = 'value4' OR status = 'value5',但添加它也不会在丢失的行/值上返回 0。
【问题讨论】:
标签: mysql group-by count left-join union