计算不同物品的出现次数

时间:2017-10-02 07:29:08

标签: mysql

该表存储了在任何考试中作业时失败的学生的姓名。所以可能会有重复的记录,因为它的时间表是整整一年。受试者是静态说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 。什么是最好的查询呢?我应该将它们存储在数组或单独的表中吗?

非常感谢!! :)祝你有个快乐的一天:)

1 个答案:

答案 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()