Mysql列转行展示

2016年05月25日

考虑现在有一张city表,数据如下:

我们想以城市为列,查看每个城市的人数,即每个城市为一列,值为城市的人数.

这里需要用到mysql中的if函数:

语法: IF(expr1,expr2,expr3)

说明: 如果expr1为true,则返回expr2, 如果expr1返回false,则返回expr3.

回到问题, 以每个城市为一列来展示则必然要枚举每个城市,考虑下面的sql语句, 将表中的每一行的数据使用if函数,如果城市名匹配指定的城市,则使用该城市的人数,否则人数为0,

select
if(name='北京',people_count,0) as 北京,
if(name='上海',people_count,0) as 上海,
if(name='四川',people_count,0) as 四川
from city

执行结果:

这样,每一列中的所有人数相加,即为该城市的人数.

select
sum(if(name='北京',people_count,0)) as 北京,
sum(if(name='上海',people_count,0)) as 上海,
sum(if(name='四川',people_count,0)) as 四川
from city

加上sum函数后,即可解决最初的问题: