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

时间:2015-07-13 14:50:35

标签: mysql

想想我有一个包含两个字段的表:IDState。状态值(即布尔值)可以是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      |

怎么做?

1 个答案:

答案 0 :(得分:3)

这是一个数据透视查询,mysql不支持。这些变通方法变得非常难看,但由于你只会产生两个新的列,它不会变得非常难看,只是有点不愉快:

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

基本上state = true将评估为布尔值true / false,MySQL会将其类型转换为整数01,它们可以SUM()为{}}。