【问题标题】:How to get top 3 records on the same output row in a many to many relationship如何在多对多关系中获取同一输出行上的前 3 条记录
【发布时间】:2023-01-23 02:19:10
【问题描述】:

谁能帮我解决这个 SQL 查询问题? 假设下表:

student: student_id, first_name, last_name, age
classes: class_id, class_name
student_classes: class_id, student_id     # junction table

我正在尝试构建一个查询以从每个班级中选择前 3 名最年长的学生。输出如下:

class_id, class_name, top1_first_name, top1_age, top2_first_name, top2_age, top3_first_name, top3_age

我坚持如何在同一输出行上显示这样的输出

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    SELECT
        classes.class_id,
        classes.class_name,
        (SELECT first_name FROM student WHERE student.student_id = top1.student_id) AS top1_first_name,
        top1.age AS top1_age,
        (SELECT first_name FROM student WHERE student.student_id = top2.student_id) AS top2_first_name,
        top2.age AS top2_age,
        (SELECT first_name FROM student WHERE student.student_id = top3.student_id) AS top3_first_name,
        top3.age AS top3_age
    FROM
        classes
        JOIN student_classes ON classes.class_id = student_classes.class_id
        JOIN (SELECT student_id, age FROM student ORDER BY age DESC LIMIT 3) top1 ON top1.student_id = student_classes.student_id
        JOIN (SELECT student_id, age FROM student ORDER BY age DESC LIMIT 3 OFFSET 1) top2 ON top2.student_id = student_classes.student_id
        JOIN (SELECT student_id, age FROM student ORDER BY age DESC LIMIT 3 OFFSET 2) top3 ON top3.student_id = student_classes.student_id
    GROUP BY classes.class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2019-07-26
      • 2018-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多