1

問題は次のとおりです。各部門について、提供されたコースのすべてのセクションの最大および最小登録者数をリストします。ただし、一部の登録者がいるセクションのみを考慮してください。つまり、そのセクションを受講する学生がいないセクションについては心配しないでください。

Department(dept_name, building, budget)
Section(course_id, sec_id, semester, year, building, room_number, time_slot_id)
student(student_id, name, major, tot_cred)
takes(student_id, course_id, sec_id, semester, year, grade)
course(course_id, title, dept_name, credits)

クエリ:

SELECT * 
  FROM course 
  NATURAL JOIN (SELECT count(student_id) AS tot 
  FROM takes NATURAL JOIN section GROUP BY course_id)

^^^ 登録を行います。最大と最小を見つける必要があります

4

3 に答える 3

2

これにはサブクエリを使用します。

select min(cnt), max(cnt)
from (select dept_name, count(*) as cnt
      from student s join
           takes t
           on s.student_id = t.student_id join
           course c
           on t.course_id = c.course_id join
           department d
           on c.department_id = d.department_id
      group by dept_name
     ) t

courseこれを行うために、部門 ID を含むテーブルがあると想像しました。上記のテーブルには部門へのリンクがありません。

あなたのクエリは単に意味がありません。FROM句では「,」を使用しないでください。クロス結合を行う場合は、明示的にCROSS JOIN. enrollmentが定義されていないため、どのデータベースでもクエリに構文エラーがあると思います。

于 2012-10-02T21:40:38.880 に答える
0
select
    course_id,
    min(tot_per_course_sec) min_section_enrolment,
    max(tot_per_course_sec) max_section_enrolment
from course
natural join (
    select course_id, sec_id, count(student_id) as tot_per_course_sec
    from takes
    natural join section
    group by course_id, sec_id
    having count(student_id) > 0
    ) sec_grouped
于 2012-10-03T00:42:11.263 に答える