【问题标题】:SQL: How to select multiple COUNT values that share NAME field?SQL:如何选择共享 NAME 字段的多个 COUNT 值?
【发布时间】:2019-03-23 23:05:41
【问题描述】:

我有一个名为 STUDENTS 的 APACHE DERBY 数据库表,其中包含以下行:

_____________________________
| NAME  |COUNTER|   MONTH   |
-----------------------------
| bill  |   10  |   January |
-----------------------------
| bill  |   12  |   February|
-----------------------------
| bill  |   11  |   March   |
-----------------------------
| sam   |   14  |   January |
-----------------------------
| sam   |   9   |   February|
-----------------------------
| sam   |   22  |   March   |
-----------------------------
| hal   |   21  |   January |
-----------------------------
| hal   |   18  |   February|
-----------------------------
| hal   |   19  |   March   |
-----------------------------

我正在尝试找到获得以下输出的语法...

_________________________________
| NAME  |  JAN  |  FEB  |   MAR |
---------------------------------
| bill  |  10   |  12   |  11   |
---------------------------------
| sam   |  14   |   9   |  22   |
---------------------------------
| hal   |  21   |  18   |  19   |
---------------------------------

我尝试了以下方法:

select distinct(name), 
    (SELECT COUNTER FROM STUDENTS WHERE NAME = 'bill' AND month = 'january') as jan,
    (SELECT COUNTER FROM STUDENTS WHERE NAME = 'bill' AND month = 'february') as feb,
    (SELECT COUNTER FROM STUDENTS WHERE NAME = 'bill' AND month = 'march') as mar
    FROM STUDENT where name = 'bill'

...它有点像一个学生的概念证明。但是,它很冗长,仅适用于一名学生,并且不适用于任何来自 未来几个月我将添加到数据库中。这意味着,无论数据库中存在多少个月的数据,我都希望能够获得每个 NAME 的最后 3 个 COUNTER 值。

我查看了多个 s.o.与嵌套查询相关的问题,但没有一个有帮助。

建议?

感谢任何帮助!

【问题讨论】:

  • 这是一个经典的“枢轴”问题。使用该关键字搜索 S.O.答案可能会有所帮助。

标签: sql derby


【解决方案1】:

可以使用条件聚合

SELECT name,
       Max(CASE WHEN month = 'January'  THEN counter end) AS jan,
       Max(CASE WHEN month = 'February' THEN counter end) AS feb,
       Max(CASE WHEN month = 'March'    THEN counter end) AS mar
  FROM student
 GROUP BY name  

【讨论】:

    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 2017-08-15
    • 2017-12-26
    • 2015-08-24
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多