SQL: 如何 select 共享 NAME 字段的多个 COUNT 值?
SQL: How to select multiple COUNT values that share NAME field?
我有一个名为 STUDENTS 的 APACHE DERBY 数据库 table,其中包含以下行:
_____________________________
| 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'
...它有点像一个学生的概念证明。然而,它很冗长,它只适用于一个学生,而且它不适用于来自
我将添加到数据库的未来几个月。意思是,无论数据库中存在多少个月的数据,我都希望能够获得每个名称的最后 3 个计数器值。
我看过多个 s.o。与嵌套查询相关的问题,但其中 none 个问题有所帮助。
建议?
感谢任何帮助!
您可以使用条件聚合
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
我有一个名为 STUDENTS 的 APACHE DERBY 数据库 table,其中包含以下行:
_____________________________
| 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'
...它有点像一个学生的概念证明。然而,它很冗长,它只适用于一个学生,而且它不适用于来自 我将添加到数据库的未来几个月。意思是,无论数据库中存在多少个月的数据,我都希望能够获得每个名称的最后 3 个计数器值。
我看过多个 s.o。与嵌套查询相关的问题,但其中 none 个问题有所帮助。
建议?
感谢任何帮助!
您可以使用条件聚合
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