【问题标题】:Column that increments it's value for each time a value is found in first column in MySQL每次在 MySQL 的第一列中找到值时增加其值的列
【发布时间】:2020-12-30 07:04:07
【问题描述】:

我想创建一个列,每次在第一列中找到相同的值时都会递增。这些字段可以是字符串或整数。比如:

field1 | field2
cat | 1
fish | 1
dog | 1
cat | 2
fish | 2
cow | 1

我的问题与这两个(1)、(2)类似,但如果密钥已经存在,我不想INSERTUPDATE。我想删除第二条记录。所以,类似DELETE FROM t1 WHERE field2 > 1

This question (MySQL delete duplicate records but keep latest) 与我正在尝试做的最相似,除了没有整数自动递增的 ID 列,我有另一个名为 filename 的字段,每个字段都不同重复字段1。

这叫做聚合函数吗? 如何做到这一点?

【问题讨论】:

  • 每次找到 which 值。此外,您似乎在假设行的顺序,但表代表 unordered 集。
  • row_number() over (partition by field1 order by whatever)
  • 每次找到field1 中的值时,将field2 的值设置为比上次找到field1 值时加1。这些字段可能是字符串或其他任何内容,它没有排序,我理解。
  • 我使用的是 MariaDB 5.5。所以,row_number() 不可用。
  • 编写一个插入触发器,获取最后一个数字并在插入前递增它

标签: mysql sql duplicates mariadb


【解决方案1】:

您似乎要求的是计算一个特定的值。因此,如果您尝试计算 1并且您有一个排序列,那么:

select t.*, sum(field1 = 1) over (order by <ordering column>) as field2
from t;

但是,您的结果表明您只需要枚举每个独立值。那将是:

select t.*, row_number() over (partition by field1 order by <ordering column>) as field2
from t;

【讨论】:

  • 我无法使用 row_number(),因为我使用的是 MariaDB 5.5。
  • 我不想简单地获取该值出现的次数,例如SELECT field1, count(*) as field2 FROM t1 GROUP BY field1 HAVING field2 &gt; 1 ORDER BY field2 DESC。我可以编辑上面的示例以包含更好的内容。
  • 我在谷歌上搜索了ordering column SQL这个词,并没有发现对这个结构的引用。你有一个链接来解释那是什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2015-10-10
  • 2022-08-18
  • 1970-01-01
  • 2022-01-20
  • 2013-09-17
  • 1970-01-01
相关资源
最近更新 更多