对范围MySQL

时间:2015-08-20 01:12:25

标签: mysql

我有一张如下表格

SUBJECT  - MARKS - SEMESTER
MATH     - 50    -  1
SCIENCE  - 60    -  1
ENGLISH  - 70    -  1
MATH     - 60    -  2
SCIENCE  - 80    -  2
ENGLISH  - 90    -  2

我想生成如下输出。问题是,即使在0-10范围之间没有数据,我想要在所有三列中都是0。我无法使用" group by"和"总和"。你们任何人都有任何想法

RANGE  MATH SCIENCE ENGLISH
0-10      0     0       0
10-20     0     0       0
20-30     0     0       0
30-40     0     0       0
40-50     0     0       0
50-60     1     0       0
60-70     1     1       0
70-80     0     0       1
80-90     0     1       0
90-100    0     0       1

1 个答案:

答案 0 :(得分:1)

您可以这样做,但您需要定义范围,作为参考表或在查询中。其余的是条件聚合:

select r.range,
       sum(subject = 'MATH' and t.marks is not null) as Math,
       sum(subject = 'SCIENCE' and t.marks is not null) as Science,
       sum(subject = 'English' and t.marks is not null) as English
from ((select 0 as mins, 9.99 as maxs, '0-10' as range) union all
      (select 10 as mins, 19.99 as maxs, '10-20' as range) union all
      . . .
      (select 90 as mins, 100 as maxs, '90-100' as range)
     ) left join
     table t
     on t.marks between r.mins and r.maxs
group by r.range
order by min(r.mins);