2016-04-25 106 views
-3
select NATIONALPLAYERS.FIRSTNAME||' '|| NATIONALPLAYERS.LASTNAME as PlayerName, NATIONALPLAYERS.EXPERIENCEID, experience 

from NATIONALPLAYERS 

INNER JOIN (select experienceid, MAX(experiences.nationalgames + experiences.internationalgames) as experience 

from experiences 

group by experiences.EXPERIENCEID)plexperience 
on plexperience.experienceid = NATIONALPLAYERS.experienceid; 

這顯示從PlayerNameExperienceID,並Experience即使我只要求的experience最大值的所有記錄。如何選擇最大值的行?

+0

你問姓,名,經驗ID和經驗。這就是它會給的! –

回答

0

您正在按EXPERIENCEID分組,並獲得最大EXPERIENCE爲每個人 - 你沒有找到EXPERIENCEID,其中對應的最大EXPERIENCE

如果你想找到值最大的經驗,那麼你想要的東西,如:

SELECT * 
FROM (
    select n.FIRSTNAME ||' '|| n.LASTNAME as PlayerName 
     n.experienceid, 
     e.nationalgames + e.internationgames as Experience 
    from NATIONALPLAYERS n 
     INNER JOIN 
     EXPERIENCE e 
     ON (e.experienceid = n.experienceid) 
    ORDER BY Experience DESC 
) 
WHERE ROWNUM = 1; 

,或者,如果有多個最高行:

SELECT * 
FROM (
    select n.FIRSTNAME ||' '|| n.LASTNAME as PlayerName 
     n.experienceid, 
     e.nationalgames + e.internationgames as Experience, 
     RANK() OVER (ORDER BY e.nationalgames + e.internationgames DESC) 
      AS rn 
    from NATIONALPLAYERS n 
     INNER JOIN 
     EXPERIENCE e 
     ON (e.experienceid = n.experienceid) 
    ORDER BY Experience DESC 
) 
WHERE rn = 1; 
0

你缺少什麼最大的經驗。正在檢查的experience_id但不能確保該經驗值的最大值

查詢應該是這樣的:

SELECT 
    NATIONALPLAYERS.FIRSTNAME||' '|| NATIONALPLAYERS.LASTNAME as PlayerName, 
    NATIONALPLAYERS.EXPERIENCEID, 
    experience 

from NATIONALPLAYERS 
INNER JOIN (
    select 
     experienceid, 
     MAX(experiences.nationalgames +  experiences.internationalgames) as experience 

    from experiences 
    group by experiences.EXPERIENCEID) AS plexperience 
on 
    plexperience.experienceid = NATIONALPLAYERS.experienceid 
    **plexperience.experience = NATIONALPLAYERS.experience;** 
+0

對於每個** EXPERIENCEID而言,這仍然獲得最大'EXPERIENCE''而不是'EXPERIENCEID',它具有最大'EXPERIENCE'。 – MT0