MySQL-选择最小值的分组依据

Mr.*_*ssy 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
Run Code Online (Sandbox Code Playgroud)

我想为每个唯一的行选择descr最小值为的行val2。预期结果:

id | descr | val1 | val2
========================
3  | 'bb'  |  3   |  1
5  | 'aa'  |  5   |  1
Run Code Online (Sandbox Code Playgroud)

我尝试了以下查询:

SELECT *, min(val2) minVal FROM test group by descr
Run Code Online (Sandbox Code Playgroud)

通过结果与最小值行中的数据无关:

id | descr | val1 | val2 | minVal
==================================
1  | 'aa'  |  1   |  5   |  1
2  | 'bb'  |  2   |  7   |  1
Run Code Online (Sandbox Code Playgroud)

请指教。

谢谢

Tim*_*sen 5

在MySQL中处理此问题的一种标准方法是不使用广泛的分析功能,而是使用子查询来标识val2每个descr组的最小值。然后,使用此子查询将记录限制为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
Run Code Online (Sandbox Code Playgroud)

演示在这里:

SQLFiddle