我的一个表中有一个“布尔”列(值为0或1)。
我需要得到两个计数:布尔值设置为0的行数和将其设置为1的行数。目前我有两个查询:一个计算1,另一个计数0。
在使用WHERE条件计算行时,MySQL是否遍历整个表?我想知道是否有一个查询允许两个计数器根据不同的条件?
或者有没有办法获得WHERE条件计数的总计数?这就足够了,因为我只需要从另一个中减去一个计数(由于列的布尔性质)。没有NULL值。
感谢。
答案 0 :(得分:7)
您可以按布尔列对记录进行分组,并为每个组获取计数。
SELECT bool_column, COUNT(bool_column) FROM your_table
WHERE your_conditions
GROUP BY bool_column
这显然不仅适用于bool列,还适用于其他数据类型(如果需要)。
答案 1 :(得分:3)
试试这个:
SELECT
SUM(your_field) as positive_count,
SUM(IF(your_field, 0, 1)) as negative_count
FROM thetable
答案 2 :(得分:0)
如果它们都是0或1并且你不介意2行作为结果你可以按该字段分组并进行如下计数:
select field, count(field)
from table
group by field
答案 3 :(得分:0)
一个简单的组子句应该可以解决这个问题:
SELECT boolField, COUNT(boolField)
FROM myTable
GROUP BY boolField