2017-01-15 15 views
1

によって選択グループIは、以下のデータを持つ単純なテーブルを持っている: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 
======================== 
3 | 'bb' | 3 | 1 
5 | 'aa' | 5 | 1 

私は次のクエリを試みた。その結果によって

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

は、最小値の行のデータとは関係がありませんでした:助言

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

してください。

ありがとう分析関数のための幅広い支持を持っていないのMySQLでこれに対処する

+2

ちなみに、これは最も頻繁にSO上でMySQLのタグの下の質問をしています。時には、以下のように、正しく答えられます。 – Strawberry

答えて

4

1つの標準的な方法は、各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