计算列中的值,并按第二个值进行分组和排序

时间:2013-11-12 19:34:11

标签: sql plsql

假设我有这张表:

NAME    YEAR    SCORE
_____________________
User1   2010    1
User2   2011    3
User3   2012    2
User4   2013    1
User5   2012    1
User6   2011    3
User7   2010    4
User8   2011    1

我想创建一个查询,其输出如下所示:

YEAR    1    2    3    4
________________________
2010    1    0    0    1
2011    1    0    2    0
2012    1    1    0    0
2013    1    0    0    0

其中编号列中的值是该分数在给定年份中出现的次数。这似乎应该很容易,但我无法弄清楚如何以一种静态的方式编写这个查询。想法?

2 个答案:

答案 0 :(得分:0)

select  YEAR,
    count(CASE WHEN SCORE = 1 THEN 1 END) AS `1`,
    count(CASE WHEN SCORE = 2 THEN 1 END) AS `2`,
    count(CASE WHEN SCORE = 3 THEN 1 END) AS `3`,
    count(CASE WHEN SCORE = 4 THEN 1 END) AS `4`
from TABLE
group by year

答案 1 :(得分:0)

对于一组四个值

SELECT YEAR, SUM(CASE WHEN SCORE = 1 THEN 1 ELSE 0 END) AS `1`, 
SUM(CASE WHEN SCORE = 2 THEN 1 ELSE 0 END) AS `2`,
SUM(CASE WHEN SCORE = 3 THEN 1 ELSE 0 END) AS `3`,
SUM(CASE WHEN SCORE = 4 THEN 1 ELSE 0 END) AS `4`
FROM TABLE
GROUP BY YEAR