2017-05-28 3 views
0

Die folgende SQL-Abfrage hält einen Fehler zu werfen, die Gruppenfunktion zu verschachtelt ist tiefOra-00935 Fehlergruppe verschachtelt zu tief

select department_name 
from department 
where department_id in (select department_id 
         from student 
         group by department_id 
         having count(student_id)=max(count(student_id))); 

Kann jemand vorschlagen, wie dies zu korrigieren, ohne andere Tabelle machen ??

Antwort

0

Probieren Sie die Analysefunktion MAX mit

SELECT department_name 
FROM department 
WHERE department_id IN 
    (SELECT 
     department_id 
    FROM 
     (SELECT 
      department_id, 
      COUNT(student_id) students, 
      MAX(COUNT(student_id)) OVER() max_students 
     FROM student 
     GROUP BY department_id 
    ) 
    WHERE students=max_students 
); 

Nicht getestet.

Oder in Oracle 12c ab könnten Sie die FECTH Klausel

SELECT department_name 
FROM department 
WHERE department_id IN 
    (SELECT department_id 
    FROM student 
    GROUP BY department_id 
    ORDER BY COUNT(student_id) DESC 
    FETCH FIRST ROW WITH TIES 
); 
1

Ich sehe nicht, was die in kauft Sie verwenden. Ich finde diese einfacher zu schreiben und mit der Berechnung in der from Klausel zu folgen:

select d.department_name 
from (select s.department_id, count(*) as num_students, 
      rank() over (order by count(*) desc) as seqnum 
     from student s 
     group by s.department_id 
    ) s join 
    department d 
    on s.department_id = d.department_id 
where seqnum = 1; 

Dies macht es auch einfach die Zahl der Studierenden in den bevölkerungsreichsten Abteilungen hinzuzufügen.

Verwandte Themen