SQL:如何选择共享 NAME 字段的多个 COUNT 值?

标签 sql derby

我有一个名为 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'

...它有点像一个学生的概念证明。然而,它很冗长,它只适用于一个学生,而且它不适用于来自 我将添加到数据库的 future 几个月。意思是,无论数据库中存在多少个月的数据,我都希望能够获得每个名称的最后 3 个计数器值。

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

建议?

感谢任何帮助!

最佳答案

你可以使用条件聚合

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  

关于SQL:如何选择共享 NAME 字段的多个 COUNT 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55319192/

相关文章:

apache-spark - 如何从 Spark Shell 中删除 derby.log、metastore_db

java - 如何更新 Derby 数据库的版本

SQL将丢失的数据从一个表复制到另一个表

mysql - 复制到自动增量更改表的 tmp 表

java - apache Derby - 创建新数据库时获取 java.io.FileNotFoundException : derby. 日志(访问被拒绝)

derby - 将 Apache derby 数据库文件复制粘贴到另一个系统中是否可以正常工作

java - JPA 客户端-服务器复制/同步框架?

mysql - 从数据库中获取当月数据

mysql - 如何在 MySQL 中以相反的顺序选择行?

sql - 如何识别硬编码的数据库名称 - SQL Server 2008 r2