2015-09-27 39 views
0

我有兩個表,我需要找到具有最高值的人。Aggregate操作oracle

TABLE1

TABLE2

ID    VALUE 
--------  -------------- 
101   12 
102   10 
103   20 
104   20 
105   10 
106    5 

我可以寫一個SELECT語句,這將使名稱和值的結果:

SELECT name, value 
    FROM table1, table2 
    WHERE table1.id = table.id; 
NAME VALUE 
----- ---------- 
    MIKE   12 
    MIKE   10 
    BETTY   20 
    BETTY   20 
    BETTY   10 
    TIM   5 

現在我需要用平等的名字來聚合行的值,我無法弄清楚。我正在以正確的方式去做嗎?

+0

您想讓每個人具有最高價值或最高價值的人嗎? –

回答

2

請試試這個:

select a.name,max(b.value) as value 
from table1 a 
inner join table2 b on a.id = b.id 
group by a.name 

反正你在問題中標記的MySQL和Oracle。幸運的是,這個SQL在兩個工作。但是你必須刪除這兩個標籤中的一個,以確保你使用的是哪個dbms。

+0

錯誤在第1行: ORA-00904:「B」。「VALUE」:無效的標識符 我得到了這個錯誤 – user3137110

+0

@ user3137110這意味着你沒有在表2中的列'值'。你能提供你的餐桌結構是怎樣的嗎? – RubahMalam

+0

我的錯誤是我錯誤地標記了該屬性。有效。當你寫「a.name」和「b.value」時,你在做什麼? – user3137110

1

使用這個..因爲你的列名是唯一的,你不需要任何別名。

select name, max(value) as MaxValue 
from table1 
inner join table2 on table1.id = table2.id 
group by name