2016-05-01 8 views
0

Ich habe die folgende Tabelle courseErste min von GROUP BY-Klausel

course(idcourse, title, description, price, date, instructor) 

Und ich möchte den Lehrer mit weniger Kurse bekommen. Bisher kann ich mit der Anzahl der Kurse jeden Lehrer bekommen er

SELECT instructor, count(*) 
FROM courses 
GROUP BY instructor; 

Das Ergebnis dieser Abfrage in meinem Beispiel lehrt, ist dieses:

INSTRUCTOR COUNT(*) 
1   5 
2   2 
7   5 

Jetzt muss ich mit weniger Kurse der Lehrer bekommen . Was ist dieser spezielle Fall ist 2.

Ich habe versucht mit HAVING count(*) = min(*), aber es gibt einen Syntaxfehler.

Wie soll ich die min bekommen? Soll ich einen anderen Ansatz ausprobieren?

+0

Was ist die Datenbank? – Mihai

+0

Was ist, wenn es zwei Instruktoren gibt, die die gleiche Anzahl von Kursen haben und beide auf der 'min' sind? Zum Beispiel, mit Ihren Beispieldaten, wenn Sie den Lehrer mit dem 'max' wollten, dann haben sowohl 1 als auch 7 5 Kurse. Es kann mehrere Ergebnisse geben im Gegensatz zu "der Ausbilder mit weniger Kursen". – user212514

+0

Es ist in Ordnung, wenn der SELECT-Befehl mehr als eine Zeile zurückgibt. – jpuriol

Antwort

1

können Sie verwenden having so (zumindest mit Oracle):

SELECT instructor, count(*) cnt 
    FROM courses 
    GROUP BY instructor 
    HAVING count(*) = (select min(count(*)) from courses group by instructor) 
1

Sie könnten FETCH FIRST 1 ROWS ONLY (SQL:2008 standard) verwenden:

SELECT instructor, count(*) 
FROM courses 
GROUP BY instructor 
ORDER BY 2 
FETCH FIRST 1 ROWS ONLY 

Einige Datenbanken haben noch diese Syntax nicht unterstützen, haben aber alternative Syntax wie LIMIT 1. Einige andere unterstützen TOP 1 wie folgt aus:

SELECT TOP 1 instructor, count(*) 
FROM courses 
GROUP BY instructor 
ORDER BY 2 

Siehe umfangreiche Liste von mehr alternative Syntaxen in der früheren wikipedia article verwiesen.

Hinweis: Die Klausel ORDER BY 2 sortiert die Ergebnisse in der zweiten Spalte (aufsteigend), wonach die FETCH FIRST (oder alternative) -Klausel das Ergebnis auf nur den ersten Datensatz reduziert.