福州网站制,做百度手机网站优化点,门户网站建设理由,ck播放器做解析网站目录 方法一#xff1a;sum case when
方法二#xff1a;sum if
方法三#xff1a;pivot 现在有一张表class_gender#xff0c;内容如下#xff1a;
classgender一年级女一年级女一年级男一年级男二年级女二年级女二年级男 现在我们要根据上表#xff0c;统计得到下…目录 方法一sum case when
方法二sum if
方法三pivot 现在有一张表class_gender内容如下
classgender一年级女一年级女一年级男一年级男二年级女二年级女二年级男 现在我们要根据上表统计得到下面的内容该如何操作呢 class男女一年级22二年级12 如果用groupby去统计每个年级的男女个数那么得到的样式如下 select class,
gender,
count(1) as count
from class_ gender1
group by class , gender我们需要在这个基础上实现类似python中的unstack的功能把gender列unstack到列中那么SQL中怎么实现呢
方法一sum case when select class ,
sum(case when gender 男then 1 else 0 end) 男,
sum(case when gender 女then 1 else 0 end)女
from class_ gender1
group by class 方法二sum if select class,
sum(if (gender男, 1 , 0))男,
sum(if (gender女, 1 , 0))女
from class_ gender1
group by class 方法三pivot
这个是类似于stack unstack的方法 但是我的电脑上总报错不知道是不是不支持以后再详细介绍。
先放一个具体的实例供参考
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]
FROM WEEK_INCOME
PIVOT
(SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])
)TBL--别名一定要写
第一步
SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])
这里是PIVOT第一步骤也是核心的地方进行行转列操作。
聚合函数SUM表示你需要怎样处理转换后的列的值是总和(sum)还是平均(avg)还是min,max等等。后面的for [week] in([星期一],[星期二]...)中 for [week]就是说将week列的值分别转换成一个个列也就是“以值变列”。但是需要转换成列的值有可能有很多我们只想取其中几个值转换成列那么怎样取呢就是在in里面了注意in里面是原来week列的值。总的来说这句代码如果直译出来就是说将列[week]值为星期一,星期二,星期三,星期四,星期五,星期六,星期日分别转换成列这些列的值取income的总和。
第二步
FROM WEEK_INCOME
这里也可以是一个select子查询但为子查询时候要指定别名否则语法错误
第三步
SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]
选择行转列后的结果集的列这里也可以用 * 表示选择所有列也可以只选择某些列