根据group_concat中的min,max差异查询以获取项目

时间:2018-11-08 22:13:34

标签: mysql sql

假设我有以下条目:

 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

如果最小(年)距离最大(年)超过5年,我将如何查询以获取所有结果。正确的结果将是:

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

1 个答案:

答案 0 :(得分:1)

您的第一个查询是错误的。应该是:

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扩展(但恰好是我喜欢的扩展)。