Mysql 根据组中最小值和最大值的差异查询以获取项目

Mysql 根据组中最小值和最大值的差异查询以获取项目,mysql,sql,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

假设我有以下条目:

 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

你的第一个问题是错误的。应该是:

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

谢谢——第二种方法非常优雅,也很容易阅读。感谢您指出我查询中的错误/打字错误。