假设我们有两个实体:老师和学生。
每个老师都有多个学生。
现在我想:
查询最多5名教师,每名教师不超过10名学生。
到目前为止,可以很容易地做到这一点:
select *,
(
select GROUP_CONCAT('<sid>',students.name,'</sid>') from students on
teachers.id=students.teacher limit 10
) as students
from teachers limit 5但这还不是故事的全部。
和
如果教师中有10名以上的学生,则应为该教师返回true,否则为false
如何在SQL中做到这一点?
发布于 2009-12-16 05:12:05
伪SQL:为5名教师中的10名学生每人提供一行结果
select t.teacher_id, s.student_id,
case when t2.count > 10 then 'true' else 'false' end
from
(select top 5 *
from teachers
order by teacher_id) t
join
(select top 10 *
from students s1 join teachers t1 on s1.teacher_id = t1.teacher_id
order by student_id) s
on t.teacher_id = s.teacher_id
join
(select teacher_id, count(*) as count
from teachers t join students s on t.teacher_id = s.teacher_id
group by teacher_id) t2
on t2.teacher_id = t.teacher_id发布于 2009-12-16 04:50:27
LINQ让这件事变得非常简单
发布于 2009-12-16 04:51:38
对选定的每个教师使用子查询。
https://stackoverflow.com/questions/1912362
复制相似问题