2012-06-17 11 views
8

Ich habe die folgende Tabelle:MAX-Funktion ohne Gruppe von

ID | NUM 
1 | 4 
2 | 9 
3 | 1 
4 | 7 
5 | 10 

Ich möchte ein Ergebnis von:

ID | NUM 
5 | 10 

Wenn ich versuche, MAX (NUM) zu verwenden, die ich bekommen und Fehler, die ich habe Verwenden von GROUP BY, um die MAX-Funktion zu verwenden

Irgendeine Idee?

+0

Was willst du maximal? 'ID' oder' NUM'? – JHS

+1

Ich möchte den MAX von Num, aber ich möchte auch die ID kennen. –

+2

Beispiel könnte besser sein, wenn Sie 5, 10 hacken und 2, 9 wie erwartet Ergebnis haben. Was passiert, wenn zwei Zeilen einen MAX (num) teilen? – Glenn

Antwort

9

Gemäß der Fehler, die Verwendung eines Aggregats wie Max erfordert eine Group By-Klausel, wenn in der Auswahlliste nicht aggregierte Spalten vorhanden sind (In Ihrem c ase, Sie versuchen, MAX(Num) zu finden und geben dann die Werte zurück, die in der Spalte ID zugeordnet sind). In MS SQL Server können Sie bekommen, was Sie über Bestell wollen und die Begrenzung der zurückgegebenen Zeilen:

SELECT TOP 1 ID, NUM 
FROM [table] 
ORDER BY NUM DESC; 

In anderen RDBMS-Systeme die LIMIT bietet eine ähnliche Funktionalität.

bearbeiten

Wenn Sie alle Zeilen zurückgeben, die die gleiche maximale haben, dann verwenden Sie die WITH TIES qualification:

SELECT TOP 1 WITH TIES ID, NUM 
FROM [table] 
ORDER BY NUM DESC; 
1

Wie wäre:

SELECT TOP 1 ID,NUM FROM table ORDER BY NUM DESC; 
+0

Ja, ich war auf Autopilot. Ich habe es korrigiert – jpiasetz

1

dies tun -

SELECT TOP 1 ID, 
     NUM 
FROM <yourtable> 
ORDER BY NUM DESC; 
+0

@AaronBertrand - Ich hoffe, Sie wissen, dass der Fragesteller seine Frage bearbeiten kann. Warum glaubst du, gab es 3 Antworten mit "LIMIT"? – JHS

+1

Entschuldigung, ich kam 5 Stunden später hierher und sehe keine Beweise für irgendwelche Änderungen an der Frage. Offensichtlich, wenn ich LIMIT Antworten sehe, sollte ich sie nicht einfach bleiben lassen, weil sie falsch sind, oder? Danke für die Korrektur, aber jetzt ist es nur ein Duplikat. –

2

mehr als 1 Ergebnis zurückliefern:

SELECT id, num 
    FROM table 
    WHERE num = (SELECT MAX(num) FROM table) 
3

Diese Abfrage.

WITH result AS 
    (
     select DENSE_RANK() OVER( ORDER BY NUM desc) AS RowNo,ID,NUM from #emp 
    ) 
    select ID,NUM from result where RowNo=1 

wird es max Werte zurückgeben, auch wenn es mehr MAX hat Werte wie:

ID | NUM 
5 | 10 
6 | 10 

untenstehenden Link finden Sie mehr über RANKING Funktionen kennen:
http://msdn.microsoft.com/en-us/library/ms189798

-1

erhalten alle Zeilen max Werte, aber es gibt 3 SELECT, Es ist nicht gut für die Leistung

SELECT id, MAX(num) as num 
FROM table 
GROUP BY id 
ORDER BY MAX(num) DESC 
LIMIT (SELECT COUNT(*) 
     FROM table 
     WHERE num =(SELECT MAX(num) FROM table) 
     ) 
+1

Diese Frage ist mit SQL Server markiert, es gibt keine 'LIMIT' – Taryn