2015-11-02 3 views
0

J'ai une question comme ci-dessous:SQL sélectionner la valeur max

Select Lname, MAX(HOURS)  
From (Select E.LName, SUM(Hours) as HOURS  
From WORKS_ON W  
    JOin EMPLOYEE E on E.SSN=W.ESSN  
Group by E.SSN) as hours 

La réponse est comme:

Lname MAX(HOURS) 

Black 55 

De DB 55 est bonne réponse pour l'heure max. Mais Black ne travaille pas 55 heures, c'est un autre homme appelé Grant. Il semble que j'ai une réponse qui ne se rapporte pas. Que dois-je faire pour obtenir comme:

"Grant 55" comme réponse.

+0

peut-être, vous pouvez expliquer ce que je fais mal ??? –

+0

s'il vous plaît ajouter des informations sur vos tables ... – davejal

+0

S'il vous plaît fournir des exemples de données ou créer un violon – Wanderer

Répondre

1
Select E.LName, SUM(Hours) as HOURS  
From WORKS_ON W  
    JOin EMPLOYEE E on E.SSN=W.ESSN  
group by E.LName 
ORDER BY HOURS desc 
limit 1 
+0

J'ai un résultat: Noir 604, je pense que je dois ajouter un groupe par votre code –

+0

@NurdauletKenges, oui, bien sûr un GROUP BY est requis ... J'ai modifié. – jarlh

0

Je suppose LName distincte, dans le tableau SSN E

Select 
    E.LName 
    ,SUM(Hours) as HOURS  
From 
    WORKS_ON W  
    JOin EMPLOYEE E on E.SSN=W.ESSN 
GROUP BY 
    E.SSN 
    ,E.LName 
ORDER BY 
    E.LName 

Vous pouvez modifier l'ordre par clause selon vos besoins.