首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:如何对每个分组中的数据进行排序?

MySQL:如何对每个分组中的数据进行排序?
EN

Stack Overflow用户
提问于 2020-01-15 17:59:22
回答 5查看 63关注 0票数 1

我有一张这样的桌子:

代码语言:javascript
复制
| Key | Value | Message |
|-----|-------|---------|
| a   | 1     | xx      |
| a   | 2     | yy      |
| b   | 5     | mm      |
| b   | 4     | nn      |

我想按键对数据进行分组,得到每组的最小值,以及相关的消息。预计结果将是:

代码语言:javascript
复制
| Key | Value | Message |
|-----|-------|---------|
| a   | 1     | xx      |
| b   | 4     | nn      |

我使用的是MySQL 5.7。这样做有可能吗?

EN

回答 5

Stack Overflow用户

发布于 2020-01-15 18:00:20

你可以试试下面的-

代码语言:javascript
复制
select * from tablename a
where value = (select min(value) from tablename b where a.key=b.key)
票数 2
EN

Stack Overflow用户

发布于 2020-01-15 18:00:30

您可以使用row_number()

代码语言:javascript
复制
select t.*
from (select t.*, row_number() over (partition by key order by value) as seq
      from table t
     ) t
where seq = 1;

如果排名函数不支持,也可以使用相关subquery

代码语言:javascript
复制
select t.*
from table t
where t.value = (select min(t1.value) from table t1 where t1.key = t.key);
票数 1
EN

Stack Overflow用户

发布于 2020-01-15 18:02:56

在MySQL 5.7或更早版本中,处理此问题的规范方法是连接到子查询,该子查询为每个键查找最小值:

代码语言:javascript
复制
SELECT t1.`Key`, t1.`Value`, t1.Message
FROM yourTable t1
INNER JOIN
(
    SELECT `Key`, MIN(`Value`) AS min_value
    FROM yourTable
    GROUP BY `Key`
) t2
    ON t1.`Key` = t2.`Key` AND t1.`Value` = t2.min_value
ORDER BY
    t1.`Key`;

请尽量避免使用保留的SQL关键字命名列和其他数据库对象,例如KeyValue。您可以考虑是否需要在MySQL查询中键入反标记作为反模式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59748968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档