【问题标题】:How to make a column increment by one each time when a condition is met每次满足条件时如何使列增加一
【发布时间】:2021-08-20 01:16:26
【问题描述】:

我有一个“W”列,每当同一行中的“Res”列是 reswin 时,我想增加一。

我不知道如何根据前一行的 W 值使其递增。我用的是python,我试过的代码是这样的

c.execute("UPDATE profiletable SET W = W+1 WHERE Res = ?", (reswin,))

这会将第一个 W 值加 1,并且不会根据前一行增量更新每一行

编辑: sample data

编辑2: 我的意思是按rowid的顺序。

【问题讨论】:

  • 请为之前和之后添加示例表数据。
  • SQL 表代表 无序 集。如果没有指定行顺序的列,您的问题就没有意义。
  • 已编辑,我的意思是按 rowid 的顺序
  • 你的 SQLite 版本是多少?

标签: python sql sqlite


【解决方案1】:

您可以使用相关子查询:

UPDATE profiletable
SET W = W + (
  SELECT COUNT(*) 
  FROM profiletable p 
  WHERE p.Res = profiletable.Res AND p.rowid <= profiletable.rowid
)
WHERE Res = ?;

如果像您的示例数据一样,W 的所有值最初都是 0,那么您可以从代码中删除 W +,并将子查询的结果仅分配给 W
请参阅demo

如果您的 SQLite 版本是 3.33.0+,您可以使用 UPDATE...FROM 语法和 ROW_NUMBER() 窗口函数:

UPDATE profiletable AS p1
SET W = p1.W + p2.rn
FROM (
  SELECT *, rowid, ROW_NUMBER() OVER (ORDER BY rowid) rn
  FROM profiletable
  WHERE Res = ?
) p2
WHERE p2.rowid = p1.rowid; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2017-09-15
    • 2021-08-13
    相关资源
    最近更新 更多