SQL Подзапрос с использованием результатов перемешивания Union - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь выяснить, у какого дилера больше всего синих автомобилей. Ниже приведена схема таблицы:

AVAILABLE_AUTO(SERIAL_NO,MODEL,COLOR,DEALER)

У меня есть следующий запрос, который возвращает следующие результаты:

SELECT COUNT(*) AS COUNT, DEALER
FROM global.AVAILABLE_AUTO
WHERE COLOR = "blue" AND DEALER = "DEALER ONE"
UNION
SELECT COUNT(*) AS COUNT, DEALER
FROM global.AVAILABLE_AUTO
WHERE COLOR = "blue" AND DEALER = "DEALER TWO";
|COUNT|DEALER    |
|----------------|
|1    |DEALER ONE|
|2    |DEALER TWO|

Я пытаюсь выбрать Максимум этих двух результатов, поэтому я использую следующий запрос:

SELECT MAX(COUNT) AS COUNT, DEALER FROM
(
SELECT COUNT(*) AS COUNT, DEALER
FROM global.AVAILABLE_AUTO
WHERE COLOR = "blue" AND DEALER = "DEALER ONE"
UNION
SELECT COUNT(*) AS COUNT, DEALER
FROM global.AVAILABLE_AUTO
WHERE COLOR = "blue" AND DEALER = "DEALER TWO"
) AS T1;

Но он дает неверные результаты:

|COUNT|DEALER    |
|----------------|
|2    |DEALER ONE|

Dealer в этом случае должно быть DEALER TWO

1 Ответ

1 голос
/ 03 мая 2020

Просто используйте один запрос с GROUP BY и LIMIT:

SELECT COUNT(*) AS COUNT, DEALER
FROM global.AVAILABLE_AUTO
WHERE COLOR = 'blue' AND DEALER IN ('DEALER ONE', 'DEALER TWO')
GROUP BY DEALER
ORDER BY COUNT(*) DESC
LIMIT 1;

Ваш последний запрос искажен, потому что DEALER не в GROUP BY, а в SELECT.

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