返回顶部
首页 > mysql如何取分组后第一个
  • 48
分享到

mysql如何取分组后第一个

2024年03月28日 48人浏览 编程网

摘要

在 MySQL 中,可以通过使用窗口函数 ROW_NUMBER() 来获取分组后的第一条记录。ROW_NUMBER() 函数返回当前行在分组中的行号,值为 1 的行即为该组的第一条记录。

以下是一般语法:

SELECT *, ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY order_column) AS row_num
FROM table_name;

详细说明

使用 ROW_NUMBER() 函数

ROW_NUMBER() 函数的语法如下:

ROW_NUMBER() OVER (PARTITION BY partition_column ORDER BY order_column)
  • partition_column:用于分组的列。
  • order_column:用于排序的列,根据此列确定行号的顺序。

示例:

获取 orders 表中每个客户的第一个订单:

SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num
FROM orders;

结果:

order_id customer_id order_date row_num
1 10 2023-01-01 1
2 20 2023-01-02 1
3 10 2023-01-03 2
4 20 2023-01-04 2

过滤第一行

获取分组后的第一条记录后,可以使用 WHERE 子句过滤出 row_num 为 1 的行:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY group_column ORDER BY order_column) AS row_num
    FROM table_name
) AS subquery
WHERE row_num = 1;

示例:

获取 orders 表中每个客户的第一个订单的详细数据:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num
    FROM orders
) AS subquery
WHERE row_num = 1;

其他注意点

  • 如果 order_column 中有多个值相等,则最早插入的行将被视为第一行。
  • 如果不指定 ORDER BY 子句,ROW_NUMBER() 函数将按照插入顺序返回行号。
  • 可以使用其他窗口函数,如 RANK()DENSE_RANK(),来实现类似的功能。

以上就是mysql如何取分组后第一个的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: mysql如何取分组后第一个

本文链接: https://www.lsjlt.com/wiki/f8e4fd3953.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作