Mysql 用于查找计数的嵌套sql查询

Mysql 用于查找计数的嵌套sql查询,mysql,sql,Mysql,Sql,我有两张桌子 数据为rollno、batchids的学生表 批次ID为courseid的批次表 students表的BatchId列包含学生可能注册的各种课程的以逗号分隔的BatchId。现在我想知道课程中的学生人数。有人能帮我吗 到目前为止,我已达到 select * from students where batchids in (select id from batches where courseid=1) 这给了我一个id为“1”的课程学生列表。使用count() 如果我正确理解

我有两张桌子

  • 数据为rollno、batchids的学生表
  • 批次ID为courseid的批次表
  • students表的BatchId列包含学生可能注册的各种课程的以逗号分隔的BatchId。现在我想知道课程中的学生人数。有人能帮我吗

    到目前为止,我已达到

    select * 
    from students 
    where batchids in (select id from batches where courseid=1)
    
    这给了我一个id为“1”的课程学生列表。

    使用count()


    如果我正确理解了您的数据,则您有如下情况:

    学生:(s1,‘1,2,3’)

    BatchId:('1,2,3',1),('1,2,3',2),'1,2,3',3)

    假设这是正确的,逗号分隔的列表只是batchids表中的一个键。因此,要获得每个课程的计数,请执行一个联接:

    select courseid, count(*)
    from batches b join
         students s
         on b.studentid = s.studentid
    group by courseid
    

    student表中以逗号分隔的BatchId列表,这会使事情复杂化。courseid=1的相关性是什么?您使用的是哪些RDBMS-SQLServer、MySQL…?在继续之前,您应该修复您的数据模型。“以逗号分隔的BatchID列表”是一个非常糟糕的主意。请编辑以回答您的查询。
    select courseid, count(*)
    from batches b join
         students s
         on b.studentid = s.studentid
    group by courseid