繁体   English   中英

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

[英]Query to get items based on difference of min,max in group_concat

假设我有以下条目:

 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(Year)距离max(Year)超过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扩展(但恰好是我喜欢的扩展)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM