如果我有一个用户表:
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来构建这些总计?
任何帮助表示赞赏! :)
答案 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 |