选择每个组中的最后一条记录以及计数

时间:2016-06-16 07:31:58

标签: mysql sql sqlite

我们有一个名为'atable'的以下sqlite3表

id  student assignment      grade
-----------------------------------
1    A       123             9
2    A       456             9
3    A       234             8
4    B       534             7
5    B       654             9
6    C       322             7

id是唯一的,并且每个记录都会递增。我们通过运行查询

为每个用户获取最新的分配
SELECT student, assignment, grade from atable where id in 
       (select max(id) from atable group by student) order by id desc

这很好用。但是,我们还需要为用户在同一查询中收到特定成绩的每个用户提取分配数量,例如9.

任何想法建议如何增强或重写上述查询以返回计数。如上所述,我们使用的是sqlite3。

由于

3 个答案:

答案 0 :(得分:1)

您可以使用此相关查询:

SELECT t.student, t.assignment, t.grade, 
       (SELECT COUNT(*) FROM atable s
        WHERE s.student = t.student and s.grade >= 9) as total_above_9
from atable t
where t.id in 
   (select max(id) from atable group by student)
order by t.id desc

答案 1 :(得分:0)

最好加入包含原始表的聚合版本的派生表:

select t1.student, t1.assignment, t1.grade, t2.cnt 
from mytable as t1
join (
   select student, max(id) as id, 
          count(case when grade = 9 then 1 end) as cnt
   from mytable 
   group by student
) as t2 on t1.id = t2.id

答案 2 :(得分:0)

试试这个;)

select t1.student, t1.assignment, t1.grade, t2.count
from atable t1
inner join (select max(id) as id, count(if(grade=9, 1, null)) as count from atable group by student) t2
on t1.id = t2.id
order by t1.id desc