首页 > 数据库 >mysql 分组加行号

mysql 分组加行号

时间:2024-05-22 10:51:23浏览次数:22  
标签:currentid 行号 分组 mysql rownum id SELECT

mysql示例

SELECT
                case when @currentid <> t.id then @rownum :=1 else @rownum :=@rownum + 1 end AS row_num,
                case when @currentid <>  t.id then @currentid := t.id else @currentid end AS row_num,
                ID,

            FROM
                table t,
                (SELECT @rownum := 0) r,
                (SELECT @currentid := '') c
            ORDER BY
                t.id,
                t.name DESC

mysql中没有row_number() over,可以使用曲线救国的方法来解决。

1、我们先按要分组的字段排序(id)。

2、我们定义两个变量一个@rownum作为行号,@currentid作为分组号。

3、case 分组号和当前的要分组的字段比较。

4、上面的两个case的位置不能变,否者就会失效

oracle示例

SELECT
	ROW_NUMBER() OVER(
		PARTITION BY id
	ORDER BY
		id DESC
	) AS ROWNUM,
	t.id
FROM
	table t

标签:currentid,行号,分组,mysql,rownum,id,SELECT
From: https://www.cnblogs.com/jingyu-zhang/p/18205759

相关文章

  • CentOS7.9安装mysql-8.0.36踩坑小记
    前言:最近想在一台测试服务器上,安装下最新的MySQL8.0版本数据库,想着挺简单的一件事,之前也手搓过8.0安装,这不手到擒来,没想到马失前蹄,遇到了一个小坑,耗费了不少时间,简单写篇文档记录下吧。1.排错记录执行./mysqld--initialize初始化命令后,提示报错,如下图所示看报错应该是......
  • MySQL varchar 单字段的最大字符长度是多少
    MySQLvarchar字段的最大字符长度是多少MySQL行记录的存储结构:变长字段长度列表NULL值列表记录头信息row_idtrx_idroll_ptr列1列2列n每个变长字段值的长度(倒序),根据变长字段的长度而定每个允许为NULL字段的标志位(倒序),每个NULL字段占1位(5字节)隐藏字段(6字节)......
  • MySQL varchar 单字段的最大字符长度是多少
    MySQLvarchar单字段的最大字符长度是多少‍MySQL一行记录除了TEXT,BLOB类型的列,其余的字段长度加起来不能超过65535字节;mysql>CREATETABLEtest(`name`VARCHAR(65535)NULL)ENGINE=InnoDBDEFAULTCHARACTERSET=asciiROW_FORMAT=COMPACT;ERROR1118(42000......
  • MYSQL使用SELECT语句进行DELETE操作
    使用SELECT语句进行DELETE操作语法如下:DELETEFROM[表名]WHERE[筛选条件]有时我们可以需要通过使用SELECT语句来确定要删除的记录,然后再将找到的记录删除假设有一个名为s_user的表,用于存储用户信息。现在,我们希望删除所有已经失活的用户。DELETEFROMs_userWHERE......
  • 【转】mysql之高性能索引
    https://www.cnblogs.com/manmanrenshenglu/p/9013073.html当db的量达到一定数量级之后,每次进行全表扫描效率就会很低,因此一个常见的方案是建立一些必要的索引作为优化手段,那么问题就来了:那么什么是索引呢?索引的实现原理是怎样的?我们通常说的聚集索引,非聚集索引的区别是什么?......
  • MySQL delete 表数据,磁盘空间不释放 ?
    最近有个上位机获取下位机上报数据的项目,由于上报频率比较频繁且数据量大,导致数据增长过快,磁盘占用多。为了节约成本,定期进行数据备份,并通过delete删除表记录。明明已经执行了delete,可表文件的大小却没减小,令人费解项目中使用MySQL作为数据库,对于表来说,一般为表结构和表数据。......
  • MySQL 分库分表之后,id 主键如何处理?
    问:分库分表之后,id主键如何处理? 其实这是分库分表之后你必然要面对的一个问题,就是id咋生成?因为要是分成多个表之后,每个表都是从1开始累加,那肯定不对啊,需要一个全局唯一的id来支持。所以这都是你实际生产环境中必须考虑的问题。 基于数据库的实现方案 数据库自增id......
  • Pymysql的使用
    一、使用MySQLworkbench建立数据库、表创建spider数据库dropdatabasespider;createdatabasespider;ALTERDATABASEspiderCHARACTERSETutf8mb4COLLATEutf8mb4_general_ci;创建users表 usespider;droptableifexistsusers;createtableusers(idint(1......
  • 简单叙述MySQL如何优化?
    数据库设计优化:尽量减小占用磁盘空间:使用较小的数据类型,如mediumint替代int。定义字段为notnull,除非需要允许空值。对于不变的字段,如固定长度的字符串,采用char而不是varchar。优化索引设计:主索引应尽可能短,以提高效率。仅创建必要的索引,避免不必要的索引占用资源。......
  • MySql报错:Lock wait timeout exceeded: try restadina transaction
      这次是在Navicat上复制了一个表结构和数据准备备份一下,然后要用语句批量处理数据,结果导致项目上的更新操作报这个错误。  原因是因为表中的数据量太大,复制表一时半会卡到那了。  于是我在网上搜索了如下办法。尝试在数据库中杀死线程来终止复制表的操作。SELECT*FR......