0

スキーマ:

Student (snum: integer, 
         sname: char(30), 
         major: char(25), 
         level: char(2), 
         age: integer)

Faculty (fid: integer, 
         fname: char(30), 
         deptid: integer)

Class (cname: char(40), 
       meets_at: char(20),
       room: char(10), 
       fid: integer | fid    REFS Faculty.fid)

Enrolled (snum: integer, 
          cname: char(40) | snum REFS student.snum, 
          cname REFS class.name)

問題:

P1。個別のクラスの最大数を教えた学部の教員の名前を検索します。

P2。登録数が 5 を超えるすべてのクラスの名前とその登録強度を検索します。

私の試み:

#P1:
select distinct f.fname,max(distinct c.cname)
from faculty f,class c
where Exists (select c.fid,max(distinct c.cname) as myCount
from class c where
f.fid=c.fid);

#P2:
select distinct c.cname
from class c
where Exists (select c.cname
from enrolled e where
e.cname=c.cname and count(e.cname)>5);

しかし、これは私にエラーを与えています。私を助けてください。

4

2 に答える 2

0

P2 の場合、結合を使用してこれを実行できますが、ネストされたクエリは使用できません。集計関数で条件を実行することは、WHERE 句では許可されず、HAVING 句でのみ許可されます。また、最初にクラス名でグループ化する必要があります。

SELECT C.name, count(*) as enrollment
FROM Class C INNER JOIN Enrolled E
    ON C.cname=E.cname
GROUP BY C.name
HAVING count(*) > 5;

相互に関連するネストされたクエリを実行して、これを試してください:

SELECT C.cname, count(*) as enrollment_count
FROM Class C INNER JOIN Enrolled E
    ON C.cname = E.cname
WHERE EXISTS (SELECT *
              FROM Enrolled E
              WHERE E.cname = C.cname
              GROUP BY E.cname
              HAVING count(*) > 5)
GROUP BY C.cname;
于 2016-11-16T19:52:35.027 に答える
0

Q #1 : やるだけgroup by

select f.fname, COUNT(distinct c.cname)
from faculty f 
join class c
  on f.fid = c.fid
group by f.fname
order by COUNT(distinct c.cname) DESC
limit 1

相関クエリの使用:

相関 v1:

SELECT *
FROM faculty f
WHERE f.id =  (SELECT c.fid
               FROM class c 
               GROUP BY c.fid
               ORDER BY COUNT(distinct c.cname) DESC
               LIMIT 1)

相関 v2:

SELECT *
FROM (
      SELECT f.*, (SELECT COUNT(distinct c.cname)
                   FROM class c
                   WHERE c.fid = f.id) as total
      FROM faculty f
     ) T
ORDER By Total DESC
LIMIT 1
于 2016-11-16T19:52:24.297 に答える