2016-03-20 6 views
1

Angenommen, ich habe die folgende Tabelle ‚Spieler‘ in Oracle-Datenbank:Ein Oracle-Abfragewert aus den Attributen zu finden

P_ID P_NAME  C_ID  DEBUT  MATCH  RUNS 

101 amla   204  2003  190  5000 
    102 mushi   200  2001  240  7500 
    103 sakib   200  1999  150  5000 
    104 ricky   205  1993  180  7000 
    105 sachin  203  1990  250  8000 
    106 yuvi   203  1999  150  6900 

Ich brauche eine Abfrage, um die C_Id anzuzeigen, insgesamt läuft Das wird von allen Schlagmännern des Landes gemacht, das den maximalen Run Scorer hat. (In diesem Fall ist der maximale Laufzähler sachin. Daher sollte die Abfrage zurückgeben: c_id = 203, runs = 14900).

Ich konnte nur den maximalen Runscorer und das Land finden, zu dem er gehört. die Abfrage: select c_id, läuft von player wo runs = (wähle max (runs) vom player); macht das. Ich bin jedoch nicht in der Lage, weiter zu gehen.

+0

Sie sollten einen Versuch umfassen, das Problem zu lösen. –

+0

Ich habe nur den Max Run Scorer von den Batsmen gefunden. select c_id, läuft von player wo runs = (wähle max (runs) vom player); Ich könnte nicht weiter fortfahren. –

Antwort

0

Wenn Sie eine Bedingung für die Aggregatfunktion benötigen, müssen Sie die Unterabfrage- oder Having-Klausel verwenden. Diese Rückkehr immer eine Zeile, aber es ist falsch, wenn mehr als eine Gruppen gleiche Gesamt haben:

SELECT * 
FROM (
    SELECT c_id, Sum(runs) total 
    FROM player 
    GROUP BY c_id 
    ORDER BY total DESC 
) WHERE ROWNUM =1; 

Aber Sie können alle mit diesem erhalten:

SELECT c_id, Sum(runs) total 
FROM player 
GROUP BY c_id 
HAVING Sum(runs) = (
    SELECT Max(t) from (
    SELECT Sum(runs) t 
    FROM player 
    GROUP BY c_id)) 
; 
+0

Danke. Es funktionierte. –

Verwandte Themen