该表存储了在任何考试中作业时失败的学生的姓名。所以可能会有重复的记录,因为它的时间表是整整一年。受试者是静态说2(数学,科学)。我需要全年每个学生失败的次数。
我的疑问:
select a.name,
(select count(*)
from student
where name = a.name
and subject = 'maths'
) as maths,
(select count(*)
from student
where name = a.name
and subject = 'science'
) as science
from student a
group by name
虽然我的查询有效,但当主题数超过两个时效率不高。 附:我知道桌子的结构好一点。 ?但这是一项任务。enter image description here
编辑:问题是,受试者的数量约为10 。什么是最好的查询呢?我应该将它们存储在数组或单独的表中吗?
非常感谢!! :)祝你有个快乐的一天:)
答案 0 :(得分:1)
用例表达式,这里可以使用SUM()
styles.scss
或利用COUNT(){不计算NULL }
select a.name
, SUM(case when subject = 'maths' then 1 else 0 end) as maths
, SUM(case when subject = 'science' then 1 else 0 end) as science
from student a
group by a.name
或者您可以包含"否则为NULL"使用COUNT()
时