Сравнение запросов SELECT одной таблицы - PullRequest
1 голос
/ 09 апреля 2020

Я работаю с одной таблицей транспортных средств, состоящей примерно из 2000-3000 строк и содержащей марку / модель транспортного средства вместе со статусом (есть много разных статусов, меня беспокоят 'T' и 'Y' ). Я хочу создать запрос, который будет возвращать количество автомобилей, которые имеют ту же марку / модель, что и записи, но разные статусы. Например:

INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "T")
INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "Y")
INSERT INTO my_db(make, model, status) VALUES ("BMW", "6-SERIES", "Y")

Я хочу, чтобы мой запрос возвращал «1», потому что у нас есть BMW 6-й серии, который в какой-то момент совпал с T и Y. Как я могу выполнить это? Я попытался создать две отдельные таблицы и выполнить объединение, а также попытался выполнить выборку, но я не могу заставить ее работать.

edit: я должен уточнить - я хочу, чтобы он добавлялся к счетчику только в том случае, если в make / model есть запись для T и Y, а не для разных статусов в целом.

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете использовать count(*) и exists, если хотите подсчитать строки:

select count(*)
from my_db d1
where exists (select 1
              from my_db d2
              where d2.make = d.make and d2.model = d.model and
                    d2.status <> d.status
             );

Если вы хотите посчитать комбинации моделей / моделей, я бы предложил два уровня агрегации:

select count(*)
from (select make, model
      from t
      group by make, model
      having min(status) <> max(status)
     ) mm;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...