提问者:小点点

使用MySQL查询查找活跃和不活跃的学生


我在学生表中有一个列表,在表中有一个他们课程的列表,这些课程中的每一个都可能是活动的或非活动的。br>我想知道是否有一种快速的方法来查找“活动”用户,这意味着他们至少有一个活动课程(SC.codeActive/code>=1)和非活动用户。非活动用户是指没有课程(没有一行)或所有课程都=0的用户

另外,我想在得到实际列表之前先得到行计数。br>谢谢


共2个答案

匿名用户

这个查询可能有点慢,因为它使用了子查询,但是假设您有一个字段,您可能会使用这个字段:

SELECT
   students.*,
   IF (
       studentId IN (
           SELECT
               studentId
           FROM
               students_courses
           WHERE
               active=1
   ),1,0) AS hasCourses
FROM
    students

匿名用户

SELECT sum(students_courses.active) as sum, student_id FROM 
    students JOIN students_courses 
    ON students.student_id =  students_courses.student_id
    GROUP BY students_courses.student_id

如果sum=0,则表示没有课程,如果sum大于0,则表示有一些课程

对于非活动用户,获取所有不在student_course中的student_id

SELECT student_id FROM students WHERE student_id NOT IN 
     (SELECT DISTINCTROW student_id FROM students)