【问题标题】:Counting values from a column and grouping and sorting by a second value计算列中的值并按第二个值分组和排序
【发布时间】:2013-11-13 03:49:31
【问题描述】:

假设我有这张桌子:

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

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

【问题讨论】:

    标签: sql plsql


    【解决方案1】:
    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
    

    【讨论】:

    • MySQL 不支持 []。您可以使用愚蠢的反引号 (`) 或更好的双引号。
    • 这是你愚蠢的反引号 ;)
    【解决方案2】:

    对于一组四个值

    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
    

    【讨论】:

      猜你喜欢
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多