2017-01-15 2 views
1

와 나는 다음과 같은 데이터가있는 간단한 테이블이 기준 :MySQL을 - 선택 그룹 최소값

id | descr | val1 | val2 
======================== 
1 | 'aa' | 1 | 5 
2 | 'bb' | 2 | 7 
3 | 'bb' | 3 | 1 
4 | 'bb' | 4 | 19 
5 | 'aa' | 5 | 1 
6 | 'aa' | 6 | 8 
7 | 'bb' | 7 | 11 
8 | 'bb' | 8 | 3 
9 | 'aa' | 9 | 16 
10 | 'aa' | 10 | 9 

내가 val2의 최소 값으로 각각의 고유 descr에 대한 행을 선택하고자합니다. 예상 결과 :

id | descr | val1 | val2 | minVal 
================================== 
1 | 'aa' | 1 | 5 | 1 
2 | 'bb' | 2 | 7 | 1 

하여 알려 주시기 바랍니다 : 최소값의 행의 데이터는 전혀 관련이 없었다 결과에 의해

SELECT *, min(val2) minVal FROM test group by descr 

:

id | descr | val1 | val2 
======================== 
3 | 'bb' | 3 | 1 
5 | 'aa' | 5 | 1 

나는 다음과 같은 쿼리를 시도 .

당신에게 분석 기능에 대한 폭 넓은 지원하지 않습니다 MySQL은,이 다루는

+2

덧붙여, 이것은 가장 자주 SO에 MySQL의 태그 아래에 질문을합니다. 때로는 다음과 같이 정확하게 응답됩니다. – Strawberry

답변

4

한 표준 방법을 감사, 각 descr 그룹의 최소 val2 값을 식별하는 하위 쿼리를 사용하는 것입니다. 그런 다음이 부속 조회를 사용하여 test의 레코드를 결과 세트에 표시하려는 레코드로 제한하십시오. 여기

SELECT t1.* 
FROM test t1 
INNER JOIN 
(
    SELECT descr, MIN(val2) AS min_val2 
    FROM test 
    GROUP BY descr 
) t2 
    ON t1.descr = t2.descr AND 
     t1.val2 = t2.min_val2 

데모 :

SQLFiddle