MySQL的组内排序,各位大神,急救!

5.5版本,用了rank和row_number函数,但是最后都报错,版本函数不对

image.png

网上查了,好像都需要用临时变量,有没有不用临时变量的方法做到组内排序,重要的是排序后的1、2、3...序号

SQL 霜凡 发布于 2023-2-16 10:56
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
1
zsh331Lv8专家互助
发布于2023-8-11 23:52

-- 目前,通用方法就是MySQL5.8(包含)之后的开窗函数和MySQL低版本的变量实现;

--------------

最佳回答
0
weibwLv7高级互助
发布于2023-2-16 11:04

你分组的字段是不是写多了?就group by后面

  • 霜凡 霜凡(提问者) 应该跟这没关系,把其他都去掉,只保留partition by 后面的两个字段,还是一样的报错
    2023-02-16 11:10 
最佳回答
0
lxy2Lv6中级互助
发布于2023-2-16 11:25

MYSQL有些版本不支持直接这样写排序的,换种写法吧

最佳回答
0
ZxxTLv6初级互助
发布于2023-8-12 08:25

MySQL 5.5 版本不支持窗口函数,但仍然有其他方法可以实现组内分组。以下是一些替代方法:

  1. 子查询: 使用子查询可以实现组内分组。首先,您可以编写一个查询来获取每个组的唯一标识符,然后将其与原始表连接以获取所需的结果。

SELECT t1.id, t1.column1, t1.column2FROM your_table t1INNER JOIN (    SELECT group_identifier, MIN(id) AS min_id    FROM your_table    GROUP BY group_identifier ) t2 ON t1.group_identifier = t2.group_identifier AND t1.id = t2.min_id;Copy

上述例子中,your_table 是您要查询的表名,group_identifier 是用于分组的标识列名,id 是主键列名。根据具体的表结构和要求,您需要相应地修改这些名称。

  1. 自连接: 通过自连接可以实现组内分组。可以编写一个查询来自连接表本身,并在连接条件中指定组内分组所需的逻辑。

SELECT t1.id, t1.column1, t1.column2FROM your_table t1LEFT JOIN your_table t2 ON t1.group_identifier = t2.group_identifier AND t1.id > t2.idWHERE t2.id IS NULL;Copy

在上述查询中,your_table 是您要查询的表名,group_identifier 是用于分组的标识列名,id 是主键列名。根据具体的表结构和要求,您需要相应地修改这些名称。

这些方法虽然不如窗口函数方便和高效,但在 MySQL 5.5 版本中是有效的替代方案。请注意,如果您有机会升级到更高版本的 MySQL,使用窗口函数将会更加简洁和高效。

最佳回答
0
用户k6280494Lv6资深互助
发布于2023-8-12 08:51

分组内排序-https://help.finereport.com/doc-view-2487.html

https://bbs.fanruan.com/wenda/question/31601.html

  • 5关注人数
  • 496浏览人数
  • 最后回答于:2023-8-12 08:51
    请选择关闭问题的原因
    确定 取消
    返回顶部