我有一个表“ auto_ID”,其中有四列,即“ unique_id”,“ car_id”,“ car_name”和“ car_count”。我希望“ car_count”包括“ car_id”的给定值出现在列“ car_id”中的次数的计数,如下所示。请注意,我不是要进行简单的分组,而是要将相关计数添加到“ car_count”列中。我如何在sqlite3中做到这一点?
unique_id car_id car_name car_count
1234 1111 Camry 2
2345 2222 Prius 3
3456 1111 Camry 2
4567 2222 Prius 3
5678 3333 Corolla 1
6789 2222 Prius 3
我尝试使用以下命令,但未获得期望的结果:
UPDATE auto_ID
SET car_count = (SELECT COUNT(DISTINCT car_id) from auto_ID;
答案 0 :(得分:1)
由于sqlite不支持UPDATE ... FROM
您可以尝试编写子查询,然后先group by car_id
计数,再UPDATE
模式(SQLite v3.18)
CREATE TABLE auto_ID(
unique_id INT,
car_id INT,
car_name VARCHAR(50),
car_count INT
);
INSERT INTO auto_ID VALUES (1234,1111,'Camry',NULL);
INSERT INTO auto_ID VALUES (2345,2222,'Prius',NULL);
INSERT INTO auto_ID VALUES (3456,1111,'Camry',NULL);
INSERT INTO auto_ID VALUES (4567,2222,'Prius',NULL);
INSERT INTO auto_ID VALUES (5678,3333,'Corolla',NULL);
INSERT INTO auto_ID VALUES (6789,2222,'Prius',NULL);
UPDATE auto_ID
SET car_count = (
SELECT t1.cnt FROM(
SELECT COUNT(*) cnt,t1.car_id id
from auto_ID t1
GROUP BY t1.car_id
) t1
where car_id = t1.id
)
查询#1
SELECT * from auto_ID;
| unique_id | car_id | car_name | car_count |
| --------- | ------ | -------- | --------- |
| 1234 | 1111 | Camry | 2 |
| 2345 | 2222 | Prius | 3 |
| 3456 | 1111 | Camry | 2 |
| 4567 | 2222 | Prius | 3 |
| 5678 | 3333 | Corolla | 1 |
| 6789 | 2222 | Prius | 3 |
答案 1 :(得分:0)
子查询SELECT COUNT(DISTINCT car_id) from auto_ID
返回什么?对于此数据,它返回3。始终为3。(当然,假设语法正确)。
子查询中需要一个WHERE
子句。您要基于car_count
更新car_id
。您想为每个car_id
命名为cid
吗?您需要SELECT count(*) from auto_id where car_id = cid
。子查询需要一个WHERE
子句。由于它是自引用的,因此在子查询中将需要表名称的别名。
类似的方法会起作用,但是如果您想自己弄清楚,请不要看。
UPDATE auto_ID
SET car_count = (SELECT COUNT(*)
from auto_ID a2
where a2.car_id = auto_ID.car_id) ;