MySQL中如何统计单行内多列指定值的出现次数?
解决MySQL单行多列统计指定值出现次数的问题
嘿,我懂你碰到的困扰啦!你现在用的COUNT(*)是在统计满足条件的行数——哪怕同一行里有多个列匹配Menu 1,它也只会把这一行算1次,所以才会返回1而不是你想要的2。
要实现按列统计每个符合条件的值的总次数,我们可以用MySQL的条件求和思路,把每一列的匹配结果转换成数值后相加,具体SQL语句如下:
SELECT SUM( (menu_person1 = 'Menu 1') + (menu_person2 = 'Menu 1') ) AS menu_1_count FROM my_table WHERE date = '2020-04-29';
为什么这个方法管用?
在MySQL中,布尔表达式(比如menu_person1 = 'Menu 1')会自动被转换为整数:匹配成功时返回1,失败时返回0。我们把每一列的这个结果相加,就能得到单一行里Menu 1的出现次数,再通过SUM()函数汇总指定日期下所有行的结果,就得到了Menu 1的总出现次数。
如果后续你的表增加了更多类似的列(比如menu_person3、menu_person4),只需要在SUM()的括号里继续追加对应的条件表达式即可,扩展性非常好。
内容的提问来源于stack exchange,提问作者Benedikt W
相关产品推荐
相关产品推荐

