您的位置:首页 > 职场人生

一道看似简单的sql面试题(count,group by,distinct)

2012-05-05 15:34 309 查看
Q群里有群友发了一张图片,是面试公司给他的面试题,百思不得其解,在Q群求助,然后闲着没事,所以做了这道题。



现创建这个表

create table a(

content1 int,

content2 int,

content3 int

);

INSERT INTO [a] VALUES (3, 0, 5);

INSERT INTO [a] VALUES (3, 5, 5);

INSERT INTO [a] VALUES (0, 5, 5);

INSERT INTO [a] VALUES (0, 0, 5);

INSERT INTO [a] VALUES (3, 0, 5);

INSERT INTO [a] VALUES (5, 5, 5);

这道题看起来简单,很多人以为直接用

select content1,count(content1),count(content2),count(content3)

from a

group by content1;

就可以算出来了,实际结果是错误的。

如图:



经过几番思索,发现其实可以用left join on 来联合查询结果集



use test

/*

杨波兄qq:48212182解答思路:

先查询出3列中各列的个数,然后合并,再用isnull处理null为0

2012-05-05 15:20

*/

select * from a;

select a.*,isnull(b.c2,0) as 'count(c2)',isnull(c.c3,0)as 'count(c3)'

from(select content1,count(content1)as 'count(c1)'

from a

group by content1) a

left join

(select content2,count(content2)as c2

from a

group by content2) b

on a.content1=b.content2

left join

(select content3,count(content3)as c3

from a

group by content3) c

on a.content1=c.content3

当然如有更好的办法,欢迎各位进行探讨。本人QQ:48212182
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: