想想我有一个包含两个字段的表:ID
和State
。状态值(即布尔值)可以是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 |
怎么做?
答案 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会将其类型转换为整数0
或1
,它们可以SUM()
为{}}。