首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >给定一个包含班级和学生的表格,需要找到学生的差异。

给定一个包含班级和学生的表格,需要找到学生的差异。
EN

Database Administration用户
提问于 2019-08-01 05:07:13
回答 3查看 325关注 0票数 0

我有一个class_students表,在其中给定两个类in,我需要找到学生中的差异。这是我用过的sql小提琴,http://sqlfiddle.com/#!9/dba48e/11这里有任何帮助。

EN

回答 3

Database Administration用户

发布于 2019-08-01 05:29:48

例如,使用

代码语言:javascript
复制
SELECT student_id
FROM class_students
GROUP BY student_id
HAVING SUM(class_id = 1) > 0
   AND SUM(class_id != 1) = 0

更多的信息是

代码语言:javascript
复制
SELECT student_id, GROUP_CONCAT(DISTINCT class_id) classes_in
FROM class_students
GROUP BY student_id
HAVING COUNT(DISTINCT class_id) < ( SELECT COUNT(DISTINCT class_id)
                                    FROM class_students )

PS。建议--将(class_id, student_id) (或按向后字段顺序)定义为唯一/主索引--它将禁止重复记录。

票数 0
EN

Database Administration用户

发布于 2019-08-01 05:35:46

您可以使用NOT IN而不是减号运算符来获得预期的结果,因为MySQL没有负运算符。

代码语言:javascript
复制
SELECT a.student_id
FROM `class_students` a 
WHERE a.class_id = '1' 
AND a.student_id NOT IN (
    SELECT b.student_id
    FROM `class_students` b 
    WHERE b.class_id = '2'
)

请找到working demo on db<>fiddle

或者使用LEFT JOIN作为

代码语言:javascript
复制
SELECT a.student_id
FROM `class_students` a 
LEFT JOIN `class_students` b ON b.student_id = a.student_id AND b.class_id = '2'
WHERE a.class_id = '1' AND b.student_id IS NULL

Working demo on db<>fiddle

票数 0
EN

Database Administration用户

发布于 2019-08-01 20:16:55

代码语言:javascript
复制
SELECT  student_id AS student,
        (1 + 2) - class_id AS "is not in class"
    FROM  class_students
    WHERE  class_id IN (1,2)
    GROUP BY  student_id
    HAVING  COUNT(*) < 2;

返回

代码语言:javascript
复制
student   is not in class
1         2
2         1

(建议您不要在学生和班级中使用相同的数字。)

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/244289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档