我有一个包含以下数据的简单表:
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)
请指教。
谢谢
在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)
演示在这里:
| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |