MySQL - 同一列的不同WHERE子句

Hri*_*ari 1 mysql sql pivot case

我有一种情况需要根据内容创建列.

例如,这里是SQLFiddle - http://sqlfiddle.com/#!2/0ec7a/1.

我需要得到这样的结果:

--------------------------
| CITY | MALES | FEMALES |
--------------------------
| NY   | 5     | 2       |
--------------------------
| DC   | 2     | 1       |
--------------------------
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

我正在查看MySQL手册中的CASE WHEN陈述和IF陈述,但更清楚的解释将非常有用.

Boh*_*ian 6

你甚至不需要CASE!

SELECT
    city,
    sum(gender = 'm') as males,
    sum(gender = 'f') as females
FROM Population
group by city
Run Code Online (Sandbox Code Playgroud)

看到这在SQLFiddle中工作.

这个工作的原因是在mysql中,true1false0,所以总结一个条件计算它是多少次真实!

对于(大多数?)其他数据库,您必须在总和中使用枯燥的案例:sum(case when gender = 'm' then 1 else 0 end)

这种类型的数据布局称为"枢轴".有些数据库,比如Oracle,通过对SQL风格的特定扩展本身支持它,但在mysql中你必须"自己动手".