2012-04-22 77 views
1

每一個唯一的ID我有兩個表:的MySQL 5.5從表2中選擇MAX在表1

table1  table2 
column id  column id column value 
1    1   count_20 
2    1   count_30 
3    2   count_20 
4    2   count_50 
...   2   count_200 
       3   count_30 
       3   count_50 
       3   count_200 
       4   count_130 
       ...   ... 

我想建立一個查詢,將從table2選擇相應的column valuetable1, column id每一行和MAX值並在value欄中填寫DESC簡稱爲int

所以輸出應該是:

table1.id  value 
2    count_200 
3    count_200 
4    count_130 
1    count_30 
...   ... 

我在table2試圖JOIN但隨後,爲每一位value(count_%)我從table1相應id

SELECT table1.id, table2.id, table2.value FROM table1 
LEFT JOIN table2 
ON table2.id=table1.id 
WHERE table1.id<'100' 
ORDER BY 
CASE value 
    WHEN 'count_20' THEN '20' 
END DESC, 
CASE value 
    WHEN 'count_30' THEN '30' 
END DESC, 
CASE value 
    WHEN 'count_50' THEN '50' 
END DESC, 
CASE value 
    WHEN 'count_130' THEN '130' 
END DESC, 
CASE value 
    WHEN 'count_200' THEN '200' 
END DESC; 

輸出:

table1.id table2.id value 
2   2   count_200 
3   3   count_200 
4   4   count_130 
2   2   count_50 
3   3   count_50 
1   1   count_30 
3   3   count_30 
1   1   count_20 
2   2   count_20 
...   ... 

任何幫助,將不勝感激。

+0

那麼是什麼問題? – Deb 2012-04-22 00:18:56

+0

這是一個博客文章? – 2012-04-22 00:21:27

+0

問題是「我想構建一個查詢,它將從table1中選擇每行,列id和來自table2的相應列值的MAX值,並在值列中將DESC縮短爲int」。正如我所描述的: )我得到了我的答案,謝謝你的評論。 – mortaZa 2012-04-22 09:21:50

回答

1

試試這個:

select t2.id, 
'count_' + cast(max(cast(replace(t2.value, 'count_', '') as int)) varchar) intValue 
from table1 t1 
join table2 t2 on t1.id = t2.id 
group by t2.id 
order by max(cast(replace(t2.value, 'count_', '') as int)) desc 

這導致:

 
+----+-----------+ 
| ID | VALUE | 
+----+-----------+ 
| 2 | count_200 | 
| 3 | count_200 | 
| 4 | count_130 | 
| 1 | count_30 | 
+----+-----------+ 

小提琴here

+1

感謝莫斯蒂莫斯塔喬。這就像一個魅力!儘管'as int'被'signed signed'取代。再次感謝你。 – mortaZa 2012-04-22 09:17:28