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   |  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 中处理这个问题的一种标准方法是使用一个子查询来标识最小值 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

此处演示:

SQLFiddle

关于MySQL - 选择具有最小值的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660619/

相关文章:

mysql - 如何使用来自另一个表的另一行的值来覆盖行值?

PHP/MySQL 数组/numrows 交叉表

php - mysql查询失败打扰我

java - 在ListView中显示JsonArray

java - 将 PHP 代码与 Java SQL 后端连接

java - 安卓工作室 : 2 different activities in 1 button

php - 我在 IF ELSE 中遇到错误

php - 如何从链接将 mysql 单元更新为 null

php - MySQL INSERT 语句未执行

mysql列默认值0保存为NULL