MySQL 将 bool 字段计为两个不同的列

标签 mysql

假设我有一个包含两个字段的表:IDState。状态值(即 bool 值)可以是 0 或 1。ID 不是唯一的,因此表格如下所示:

  ID  |  State  |
-----------------
  1   |   true  |
-----------------
  1   |  false  |
-----------------
  2   |  false  |
-----------------
  3   |   true  |
-----------------
  1   |   true  |

现在,我想按 ID 字段对每一行进行分组,并将 State 作为结果集中的两个不同列。所以它应该是这样的:

  ID  |  TrueState  |  FalseState  |
------------------------------------
  1   |      2      |       1      |
------------------------------------
  2   |      0      |       1      |
------------------------------------
  3   |      1      |       0      |

怎么做?

最佳答案

这是一个主查询,mysql 不支持。解决方法很快就会变得丑陋,但由于您只会生成两个新列,因此它不会丑陋得可怕,只是有点令人不快:

SELECT SUM(State = True) AS TrueState, SUM(State = False) AS FalseState,
    SUM(State is NULL) AS FileNotFoundState
...

基本上 state = true 将评估为 bool 值 true/false,MySQL 将类型转换为整数 01,这它们可以 SUM()med up 吗?

关于MySQL 将 bool 字段计为两个不同的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386616/

相关文章:

mysql - 仅选择 JOIN 语句中的最后一条记录

java - MySQL 连接池超过 Java 中的最大连接数

mysql - CSV 数据未插入相应的 MySQL 表中

php - 在 Codeigniter 中选择带有限制的结果中的 SUM

mysql - 优化 mysql my.cnf - 内存使用率高到危险

mysql - 根据其他表 MySQL 中链接到它的内容选择行

PHP 将选择查询输出作为数组

python - 单例数据库连接

php - Mysql查询select需要很多时间

mysql - SQL - 计算中位数而不排序