SQLite 基于字段值的简单插入

SQLite simple insert based on a field value

SQL(SQL站点)中的一个简单问题。

我有一个这样的tabletab

 id     |   amount  |  descr 
 ---------------------------
 bolt   |        8  |  "ok"
 screw  |       20  |  "ok"
 screw  |        1  |  "ok"

对于 id 的每个不同值,我希望插入一个新行,其中相应的最大值 amount 增加 1 并使 description“增加”。

 id     |   amount  |  descr 
 ---------------------------
 bolt   |        8  |  "ok"
 bolt   |        9  |  "incremented"
 screw  |       20  |  "ok"
 screw  |        1  |  "ok"
 screw  |       21  |  "incremented"

这是我的“尝试”(大错特错,最好还是省略)

INSERT INTO tab VALUES (
    myid, 
    SELECT 1 + MAX(amount) FROM tab WHERE tab.id = myid,
    "incremented" )
WHERE myid = tab.id -- pretends to "foreach" id in tab

似乎是一个简单的问题,但恐怕我在 SQL (SQLite) 上太新手了(除了普通老厚)而不必求助于“阅读本书”来解决它: -O

你很接近。您想要一个聚合查询:

insert into tab (myid, amount, descr)
    select myid, max(amount) + 1, 'incremented'
    from tab
    group by myid;