【问题标题】:Using GROUP BY winth JOIN将 GROUP BY 与 JOIN 结合使用
【发布时间】:2021-12-10 07:47:28
【问题描述】:

我在使用 GROUP BY 和 JOIN 时遇到问题

我有 2 张桌子: 1. STUDENTS_TO_COURSE 与 course_id 和 student_id 列 2.学生id、name、age列

我需要做的是找到平均学生年龄最高的课程

我正在考虑使用 join 来合并这些表,然后以某种方式对其进行分组

我也明白我需要使用 AVG 来计算连接表上的平均学生年龄

select STUDENTS_TO_COURSE.course_id as course_id, 
students.id as student, 
students.age as age 
from STUDENTS_TO_COURSE
join students on STUDENTS_TO_COURSE.student_id = students.id

我想了几天,但没有想到任何想法

有什么线索可以解决这个问题吗?

提前致谢

【问题讨论】:

    标签: sql join group-by


    【解决方案1】:

    试试这个:

    select STUDENTS_TO_COURSE.course_id as course_id, 
    MAX(AVG(age)) as avg_age
    from STUDENTS_TO_COURSE
    join students on STUDENTS_TO_COURSE.student_id = students.id
    group by course_id,age
    

    【讨论】:

    • 谢谢,你的回答对我很有帮助 虽然你的解决方案不能正常工作,但我设法改进了一下,得到了正确的答案 正确的是select STUDENTS_TO_COURSE.course_id as course_id, AVG(age) as avg_age from STUDENTS_TO_COURSE join students on STUDENTS_TO_COURSE.student_id = students.id group by course_id order by avg_age desc limit 1
    【解决方案2】:
    select STUDENTS_TO_COURSE.course_id as course_id, 
    avg(age) as age 
    from STUDENTS_TO_COURSE
    join students on STUDENTS_TO_COURSE.student_id = students.id group by course_id order by age desc limit 1
    

    【讨论】:

      【解决方案3】:

      如果您的 SQL 代码正确,以下内容会按平均年龄的降序获取课程 ID 和平均年龄列表。 你想要的是列表的第一行。

      select 
         STUDENTS_TO_COURSE.course_id as course_id, 
         AVG(students.age) as avg_age
      from STUDENTS_TO_COURSE
      join students on STUDENTS_TO_COURSE.student_id = students.id
      GROUP BY STUDENTS_TO_COURSE.course_id
      ORDER BY AVG(students.age) DESC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 1970-01-01
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-31
        • 1970-01-01
        相关资源
        最近更新 更多