Запрос, чтобы получить элементы, основанные на разнице min, max в group_concat - PullRequest
0 голосов
/ 09 ноября 2018

Допустим, у меня есть следующие записи:

 ID    Title       Year
 1     Avatar      2009
 2     Avatar      2020
 3     Hello       2014
 4     Hello       2013
 5     New         2017

Вот как я получу каждый заголовок со всеми его годами:

SELECT title, GROUP_CONCAT(DISTINCT Year) FROM table

И это дало бы мне:

Title        Years
Avatar       2009,2020
Hello        2013,2014
New          2017

Как бы я сделал запрос, чтобы получить все результаты, где min (Год) больше, чем 5 лет от максимума (Год). Правильный результат будет тогда:

Title       Years       > 5 Year Diff
Avatar      2009,2020   YES
Hello       2013,2014   NO
New         2017        NO

1 Ответ

0 голосов
/ 09 ноября 2018

Ваш первый запрос неверен. Должно быть:

SELECT title, GROUP_CONCAT(DISTINCT Year)
FROM table
GROUP BY title;

Чтобы реализовать то, что вы хотите, это просто выражение CASE:

SELECT title, GROUP_CONCAT(DISTINCT Year),
       (CASE WHEN MAX(YEAR) - MIN(YEAR) > 5 THEN 'YES' ELSE 'NO' END) as flag
FROM table
GROUP BY title;

Довольно часто такой флаг кодируется как "1" для истины и "0" для ложных. В этом случае вы бы просто использовали логическое выражение для флага:

SELECT title, GROUP_CONCAT(DISTINCT Year),
       (MAX(YEAR) - MIN(YEAR) > 5) as flag
FROM table
GROUP BY title;

Обратите внимание, что это использование расширения MySQL (но оно мне нравится).

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