如何根据另一列元素出现次数更新SQLite表的列
SQLite按街道出现次数更新Status字段
要实现根据Street字段的出现次数批量更新Status,你可以通过统计分组次数+关联更新的方式完成,以下是两种可行方案:
方案1:使用UPDATE + FROM子句(SQLite 3.33.0+支持)
这种方式先通过子查询统计每条街道的出现次数,再关联原表进行批量更新,效率较高:
UPDATE log_table SET Status = CASE WHEN street_count > 2 THEN 1 ELSE 0 END FROM ( -- 先统计每个Street的出现次数 SELECT Street, COUNT(*) AS street_count FROM log_table GROUP BY Street ) AS street_stats -- 关联原表与统计结果 WHERE log_table.Street = street_stats.Street;
方案2:使用关联子查询(兼容旧版SQLite)
如果你的SQLite版本不支持UPDATE ... FROM,可以用行级关联子查询实现:
UPDATE log_table SET Status = ( -- 对当前行的Street,统计全表中相同值的出现次数,再判断赋值 SELECT CASE WHEN COUNT(*) > 2 THEN 1 ELSE 0 END FROM log_table AS t WHERE t.Street = log_table.Street );
效果验证
执行上述语句后,你的表会变成:
| id | Street | Status |
|---|---|---|
| 1 | "main_street" | 1 |
| 2 | "1st_street" | 1 |
| 3 | "1st_street" | 1 |
| 4 | "main_street" | 1 |
| 5 | "2nd_street" | 0 |
| 6 | "1st_street" | 1 |
| 7 | "main_street" | 1 |
| 8 | "2nd_street" | 0 |
完全符合你要求的规则:出现次数>2的街道对应Status设为1,≤2的保持0。
内容的提问来源于stack exchange,提问作者berkin_ozdemir
相关产品推荐
相关产品推荐

