计算单个查询中的布尔字段值

Xav*_*ver 7 mysql sql

我喜欢获得某个字段为1或0的行数.

我的表看起来像这样:

ID | name | my_bool
===================
 1 | foo  | 1
 2 | bar  | 1
 3 | loo  | 0
 4 | zoo  | 1
Run Code Online (Sandbox Code Playgroud)

结果我期待

YES | NO  | percentage
======================
 3  | 1   | 0.3333
Run Code Online (Sandbox Code Playgroud)

YES是多少行my_bool(1)而NO行是(0)

percentage给出的百分比YESNO

Gor*_*off 18

在MySQL中,您可以使用条件聚合轻松完成此操作:

select sum(my_bool = 1) as yes, sum(my_bool = 0) as no
from table t;
Run Code Online (Sandbox Code Playgroud)

编辑:

百分比很简单:

select sum(my_bool = 1) as yes, sum(my_bool = 0) as no, avg(my_bool = 0)
from table t;
Run Code Online (Sandbox Code Playgroud)

但是,您的价值表明您正在寻找比率,而不是百分比.为此,你需要注意除以零:

select sum(my_bool = 1) as yes, sum(my_bool = 0) as no,
       (case when sum(my_bool = 1) > 0 then sum(my_bool = 0) / sum(my_bool = 1)
        end)
from table t;
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢对"除以零"之类的事情进行显式错误检查.行为由系统变量控制,因此有人可以决定更改系统上的默认值 - 并中断所有代码. (3认同)