一个面试题
今天同事发过来一个她弟弟遇到的面试题,正是我还没解决的竖表打横的问题。后来在BOBO大虾的指点下终于得以解决。由于原来的题目设计的表有点不符合实际,所以我做了些改变。
上表是一个水果日销售表。要整理成如下形式:
第一列是日期,第二列是苹果的销量,第三列是香蕉的销量。
SQL语句如下:
select k.SALETIME,coalesce(sum( case when k.Name = 'Apple' then k.COUNT end),0) Apple,
coalesce(sum( case when k.Name = 'Banana' then k.count end),0) Banana
from Sale k group by K.SALETIME
我的想法是按日期分组,再计算当天苹果和香蕉的数量,我用的方法是自连接。
select t.SALETIME,
coalesce((select sum(count) from Sale a where a.SALETIME=t.SALETIME and a.NAME='Apple'),0) Apple,
coalesce((select sum(count) from Sale a where a.SALETIME=t.SALETIME and a.NAME='Banana'),0) Banana
from Sale t group by t.SALETIME
显然不如大虾的精炼。
另外coalesce(exp1,exp2,exp3)函数用于返回第一个不为Null的值。