MySQL-选择具有最小值的分组依据
我有一个包含以下数据的简单表格:MySQL-选择具有最小值的分组依据,mysql,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 |
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
我想为每个唯一的descr
选择行,最小值为val2
。
预期结果:
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中处理此问题的一种标准方法是使用子查询,该子查询标识每个
descr
组的最小val2
值。MySQL不支持分析函数。然后使用此子查询将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
此处演示:
在MySQL中处理此问题的一种标准方法是使用子查询,该子查询为每个
descr
组标识最小val2
值,MySQL不支持分析函数。然后使用此子查询将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
此处演示:
顺便说一句,这是SO上MySQL标签下最常见的问题。偶尔,如下所示,它的回答也是正确的。顺便说一句,这是MySQL标签下最常见的问题。偶尔,如下所示,它的回答也是正确的。