首页新闻找找看学习计划

求一条SQL语句。。。。。。。。。。

0
悬赏园豆:50 [已解决问题] 解决于 2014-10-04 09:19

 

 

大神门,看看这个SQL怎么写,,,评论总数就是总记录数,,,,注意我这里可没有星级为3的数据啊,但是我要查出来(0)

SQL
五百万的主页 五百万 | 初学一级 | 园豆:131
提问于:2014-09-25 15:55
< >
分享
最佳答案
0

这是原始数据:

这是SQL:

select c.newsId,SUM(c.amount) as amount,SUM(c.[1]) as '1',SUM(c.[2]) as '2',SUM(c.[3]) as '3',SUM(c.[4]) as '4',SUM(c.[5]) as '5' 
from (select b.newsId,SUM(a) as amount,
        SUM(case b.star when 1 then a else 0 end) '1',
        SUM(case b.star when 2 then a else 0 end) '2',
        SUM(case b.star when 3 then a else 0 end) '3',
        SUM(case b.star when 4 then a else 0 end) '4',
        SUM(case b.star when 5 then a else 0 end) '5' 
        from (select newsId,star,COUNT(1) as a 
                from test group by star,newsId) b 
        group by b.newsId,b.star) c 
group by c.newsId

这是处理结果:

给分楼主 :)

收获园豆:50
自由_ | 菜鸟二级 |园豆:440 | 2014-09-27 09:10

给分,,我就喜欢这样的回复结果。

五百万 | 园豆:131 (初学一级) | 2014-10-04 09:18
其他回答(4)
1

如果你只是这个三星的问题的话,有个方法

select count(*) as Star3Count where 星级=3

UNION ALL 

select count(*0 as Star4Count where 星级=4

...

爱编程的大叔 | 园豆:30471 (高人七级) | 2014-09-25 16:45
0

这个最好不要用sql处理,用C#处理,Dictionary<int,int>存储,前面int类型的key就存储1,2,3,4,5,代表几星。后面int类型的value 存储每个星的个数。sql语句把这个表的记录查询出来,在C#用for循环一次就可以了。

悟行 | 园豆:12238 (专家六级) | 2014-09-25 17:08
0

我之前的做法是定义一个表变量 插入状态值.到时候group by 出来的数据left join 一下

xu.c | 园豆:284 (菜鸟二级) | 2014-09-25 18:05
0

1、先根据星级group by;

2、将结果使用pivot翻转;

3、计算总数与翻转结果连接。

幻天芒 | 园豆:36594 (高人七级) | 2014-09-25 20:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册