Declan Asked: 2021-08-29 09:01:43 +0800 CST2021-08-29 09:01:43 +0800 CST 2021-08-29 09:01:43 +0800 CST 对列中的每个不同值应用第 n 个出现次数 772 我有一个包含一列值的表,其中每个值出现的次数可变(即,一个值可能出现 1 次,另一个值可能出现 3 次)。我需要添加一个列来标识其对应值的出现序列#。 输入表 SOURCE_VAL 一个 一个 b C C C 输出表 SEQUENCE_VAL SOURCE_VAL 1 一个 2 一个 1 b 1 C 2 C 3 C 用于此的 SQL 是什么? mysql mysql-5.5 2 个回答 Voted Best Answer nbk 2021-08-29T09:34:31+08:002021-08-29T09:34:31+08:00 在 mysql 5.5 中,您可以为此使用用户定义的变量 CREATE TABLE tab1 (`SOURCE_VAL` varchar(1)) ; INSERT INTO tab1 (`SOURCE_VAL`) VALUES ('a'), ('a'), ('b'), ('c'), ('c'), ('c') ; SELECT IF(@s_val = SOURCE_VAL,@rn := @rn +1 , @rn := 1) As SEQUENCE_VAL, @s_val := SOURCE_VAL as SOURCE_VAL FROM tab1,(SELECT @rn := 0, @s_val := '') t1 ORDER BY SOURCE_VAL 序列_VAL | SOURCE_VAL ------------: | :--------- 1 | 一个 2 | 一个 1 | b 1 | C 2 | C 3 | C db<>在这里摆弄 雪花作为 row_number SELECT ROW_NUMBER() OVER (PARTITION BY SOURCE_VAL ORDER BY SOURCE_VAL DESC) SEQUENCE_VAL SOURCE_VAL FROM tab1 RolandoMySQLDBA 2021-08-29T15:24:25+08:002021-08-29T15:24:25+08:00 由于您使用的是 MySQL 5.5,因此我有一些有趣的消息要告诉您。您知道 MyISAM 存储引擎支持带有第二列的自动递增主键吗?我在 2012 年 4 月 21 日写过这篇文章:你怎么能在一个表中有两个自动增量列?(有关MyISAM 独有的自动增量功能,请参阅MySQL 文档)。 注意:老实说,没有人应该再使用 MyISAM。由于您使用的是 MySQL 5.5,我敢于提出这个建议。实际上,我在那篇 9.5 年前的帖子中写了一些例子。 实际上,您应该使用 MySQL 5.7 或 8.0 并远离 MyiSAM。在这种情况下,您将使用@nbk 对 InnoDB Tables 的回答。
在 mysql 5.5 中,您可以为此使用用户定义的变量
db<>在这里摆弄
雪花作为 row_number
由于您使用的是 MySQL 5.5,因此我有一些有趣的消息要告诉您。您知道 MyISAM 存储引擎支持带有第二列的自动递增主键吗?我在 2012 年 4 月 21 日写过这篇文章:你怎么能在一个表中有两个自动增量列?(有关MyISAM 独有的自动增量功能,请参阅MySQL 文档)。
注意:老实说,没有人应该再使用 MyISAM。由于您使用的是 MySQL 5.5,我敢于提出这个建议。实际上,我在那篇 9.5 年前的帖子中写了一些例子。
实际上,您应该使用 MySQL 5.7 或 8.0 并远离 MyiSAM。在这种情况下,您将使用@nbk 对 InnoDB Tables 的回答。