2009-09-09 41 views
2

我有一個選擇,我在其中做「group by」。其中一列是一個枚舉,我想爲每個組選擇最大的值(即枚舉中索引最大的那個)。我可以做如何獲得索引中的枚舉元素

select MAX(enum_column+0) as enum_index 

獲得該組中最大的索引,但我又怎麼能枚舉指數回枚舉項?


例: 說我有一個表「兵」有三列:

"id" - soldier's ID 
"name" is the soldier's first name (a varchar field). 
"rank" is the soldier's rank, and it is an enum: 
{'private','sergent'...,'lieutenant' etc.} 

現在假設我要找到每個名字,這個名字在最高等級的人有。 我可以這樣做:

select MAX(rank+0) as enum_index,name from soldiers group by name 

但是,這將使我在枚舉領域的最大元素的索引,而不是元素的名稱。即它會給我:

1 | john 
2 | bob 

,我想

'private' | john 
'sergent' | bob 

我怎樣才能達到預期的效果?

+0

您不知道rank是如何變成字符串/ varchar rank_name值的數字。 – 2009-09-09 14:26:02

+0

我不知道我理解你,但如果你的意思是我沒有解釋如何從字符串更改爲int,那是因爲它是一個ENUM類型... – olamundo 2009-09-09 16:34:22

回答

2

運行以下

CREATE TABLE ranks 
SELECT DISTINCT rank+0 as id, CONCAT('',rank) as rank 
FROM soldiers 

然後跟戰士表連接的數據。注意它只會給你實際使用的等級。

0
SUBSTR(MAX(CONCAT(0+column, column)), 2) 

的的concat將產生像0private1sergeant物品;當採取MAX時,這些將被排序爲字符串。在這種情況下,這與按枚舉順序排序相同。最後,substr刪除了最初的數字。

如果您的枚舉中有超過10個項目,則必須使用前導數字格式化數字值,並在substr調用中刪除其他數字。