2016-03-20 8 views
2

Ich habe eine Tabelle namens ClassWithTest, die alle Tests auflistet, die einer Klasse zugewiesen wurden. Siehe unten:Gibt den höchsten Zählwert in der SQL-Abfrage zurück

ClassNum TestCode 
111  EngTest 
111  MatTest 
111  SciTest 
111  GerTest 
222  TecTest 
333  HisTest 
333  LonTest 
333  CodTest 
333  SpaTest 
333  SwmTest 

Jetzt möchte ich eine Abfrage ausführen, die die Klasse mit dem meisten Test zurückgibt. Ich habe bereits begonnen, daran zu arbeiten und bisher habe ich dies produziert:

SELECT ClassNum, COUNT(testCode) 
FROM ClassWithTest 
GROUP BY ClassNum; 

Es Dieses Ergebnis liefert:

ClassNum TestCode 
111  4 
222  1 
333  5 

Das Problem ich habe, bin ich nur ClassNum 333 zurückkehren will auf ihrem besitzen, als dass die Klasse mit dem meisten Test zu nehmen ist. Weiß jemand, wie ich das machen kann?

Antwort

1

Sie können dies mit order by und einen Weg, um die erste Zeile zu bekommen. Die ANSI SQL ist:

SELECT ClassNum 
FROM ClassWithTest 
GROUP BY ClassNum 
ORDER BY COUNT(testCode) DESC 
FETCH FIRST 1 ROW ONLY; 

In MySQL und SQLite, Sie LIMIT 1 anstelle der FETCH Klausel verwenden würde. In SQL Server würden Sie anstelle der FETCH-Klausel SELECT TOP 1 verwenden.

+0

Dank Gordon Linoff, es funktioniert! Ich war mir dieser FETCH-Klausel nicht bewusst. Kennen Sie eine Website, auf der diese nützlichen Klauseln aufgelistet sind? Nochmals vielen Dank für die Hilfe. – mrteeth

+0

@Mrteth. . . Welche Datenbank Sie auch verwenden, hat eine ziemlich gute Dokumentation über seine Version von SQL. –

+0

Gordon, nachdem ich dein Profil angesehen habe, ist mir aufgefallen, dass ich dein Buch auf meiner Amazon Wunschliste in der Zukunft gekauft habe. : D – mrteeth

Verwandte Themen