2012-06-17 14 views
8

Mam poniższej tabeli:funkcja MAX bez grupy przez

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

Chcę wyniku:

ID | NUM 
5 | 10 

Kiedy próbuję użyć MAX (NUM) I get i błąd, że mam używać GROUP bY, aby korzystać z funkcji Max

jakiś pomysł?

+0

Czego chcesz max? "ID" lub "NUM"? – JHS

+1

Chcę MAX of Num, ale chcę również znać identyfikator. –

+2

Przykład może być lepszy, jeśli odetniesz 5, 10 i uzyskasz wynik 2, 9 zgodnie z oczekiwaniami. Co się stanie, jeśli dwa wiersze mają wartość MAX (num)? – Glenn

Odpowiedz

9

Zgodnie z błędu, wykorzystania agregatu jak Max wymaga klauzula Group By, jeśli na liście wyboru znajdują się kolumny niezagregowane (W twoim ase, próbujesz znaleźć MAX(Num), a następnie zwróć wartość (wartości) związaną z kolumną ID). W MS SQL Server można dostać to, co chcesz przez zamawiającego i ograniczenie zwróconych wierszy:

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

w innych systemach RDBMS LIMIT oferuje podobną funkcjonalność.

Edit

Jeśli trzeba zwrócić wszystkie wiersze, które mają taką samą maksymalną, a następnie użyć WITH TIES qualification:

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

Jak o:

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

Tak, byłem na autopilocie. Poprawiłem je – jpiasetz

1

Zrób to -

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

@AaronBertrand - Mam nadzieję, że wiesz, że osoba przesłuchująca może edytować swoje pytanie. Jak myślisz, gdzie są 3 odpowiedzi z "LIMIT"? – JHS

+1

Przepraszam, przybyłem tu 5 godzin później i nie widzę żadnych dowodów na żadne zmiany. Oczywiście, jeśli widzę LIMIT odpowiedzi, nie powinienem pozwolić im zostać, ponieważ są nieprawidłowe, prawda? Dzięki za poprawienie, ale teraz to tylko duplikat. –

2

może zwrócić więcej niż 1 wynik:

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

Spróbuj zapytania.

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 

powróci wartości max nawet jeśli ma więcej MAX wartości jak:

ID | NUM 
5 | 10 
6 | 10 

patrz poniżej link, aby dowiedzieć się więcej na temat rankingu funkcje:
http://msdn.microsoft.com/en-us/library/ms189798

-1

uzyskać wszystkie wiersze mają max wartości ale istnieją 3 SELECT, to nie jest dobre dla wydajności

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

To pytanie jest oznaczone jako Serwer SQL, nie ma "LIMIT" – Taryn