2009-09-09 8 views
2

"그룹화 기준"을 수행 할 선택이 있습니다. 열 중 하나가 열거 형이며 각 그룹 (열거 형에서 가장 큰 색인을 가진 그룹)에 대해 가장 큰 값을 선택하려고합니다. 할 수있어 그룹에서 가장 큰 인덱스를 얻으려면인덱스에서 enum 요소를 얻는 방법

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가 string/varchar rank_name 값으로 변경되는 숫자 인 방법이 누락되었습니다. –

+0

나는 당신을 이해하고 있는지 잘 모르겠다. 그러나 만약 당신이 ENUM 타입이기 때문에 어떻게 실행이 문자열에서 int로 변경되었는지를 설명하지 않았다는 것을 의미한다면 ... – olamundo

답변

2

실행

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

는 그런 병사 테이블과 데이터를 조인 다음과 같습니다. 실제로 사용중인 등급 만 제공합니다.

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

0private1sergeant 또는 추천 항목을 생성합니다 CONCAT; MAX을 가져갈 때 문자열로 정렬됩니다. 이 경우 열거 형 순서로 정렬하는 것과 같습니다. 마지막으로 substr에 의해 처음 숫자가 제거됩니다.

열거 형에 10 개가 넘는 항목이있는 경우 숫자 앞에 숫자를 서식을 지정하고 substr 호출에서 추가 자릿수를 제거해야합니다.

관련 문제