Как создать столбец количества ID в другом столбце в sqlite3 - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть таблица «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;

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Что возвращает подзапрос 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. Поскольку он самореферентный, вам потребуется псевдоним имени таблицы в подзапросе.

Нечто подобное сработает, но НЕ СМОТРИТЕ , если хотите сами разобраться.

0 голосов
/ 08 сентября 2018

Из-за 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         |

Просмотр на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...