[英]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.