基于两个类别输出四行,每个类别使用布尔值

时间:2014-03-05 19:33:37

标签: mysql sql

如果我有一个用户表:

USER ID   |   GENDER   |   VOTE
----------------------------------    
1             Male         Yes
2             Female       No
3             Male         No
4             Male         Yes
5             Female       Yes

如何通过投票分析编写一个输出性别的查询:

GENDER   |    YES    |   NO
----------------------------------
Male          2          1
Female        1          1

这可以在SQL中执行,还是应该使用PHP来构建这些总计?

任何帮助表示赞赏! :)

1 个答案:

答案 0 :(得分:3)

这种类型的数据转换称为pivot。 MySQL没有PIVOT函数,但你可以通过使用带有CASE表达式的聚合函数来复制函数:

select gender,
  sum(case when vote = 'Yes' then 1 else 0 end) Yes,
  sum(case when vote = 'No' then 1 else 0 end) No
from yourtable
group by gender;

SQL Fiddle with Demo。由于您使用的是MySQL,您还可以使用IF()控制流操作符:

select gender,
  sum(if(vote = 'Yes', 1, 0)) Yes,
  sum(if(vote = 'No', 1, 0)) No
from yourtable
group by gender;

SQL Fiddle with Demo。这些都给出了结果:

| GENDER | YES | NO |
|--------|-----|----|
| Female |   1 |  1 |
|   Male |   2 |  1 |