我有一个查询按特定月份(最小值)返回图像。查询工作正常,除了min永远不会返回NULL值,我需要MIN包含NULL值。我明白MIN不会返回空值,这就是为什么我尝试过COALESCE,IFNULL,ISNULL甚至最少,但没有成功。
这是查询
SELECT i.published_date_year, i.published_date_month
FROM image i
JOIN (
SELECT i.published_date_year year, MIN(i.published_date_month) month
FROM image i
WHERE i.is_listed = 1
GROUP BY i.published_date_year
) t1 ON t1.year = i.published_date_year AND t1.month = i.published_date_month
WHERE i.published_date_year = 1967 AND i.is_listed = 1
ORDER BY i.published_date_year, i.published_date_month, i.published_date_day, i.image_id DESC
注意
MIN(i.published_date_month)
我希望能够返回空值。看起来MIN不是正确的函数,那么正确的函数或公式是什么?
答案 0 :(得分:1)
您可以使用ifnull和案例
SELECT
i.published_date_year year
, case MIN(ifnull(i.published_date_month, 0))
when 0 then null
else MIN(ifnull(i.published_date_month, 0))
end month
答案 1 :(得分:1)
您可以使用NULL
单独检查CASE WHEN
:
SELECT CASE WHEN MAX(i.published_date_month IS NULL) = 0
THEN MIN(i.published_date_month)
END
如果在NULL
中找到至少一个NULL
,则会返回i.published_date_month
。
答案 2 :(得分:1)
我确信COALESCE,IFNULL,ISNULL和LEAST的工作得很好。问题是您之后使用结果加入i.published_date_month
,显然没有任何东西等于NULL
:
... ON t1.year = i.published_date_year AND t1.month = i.published_date_month
您可以在表达式中添加围绕OR t1.month IS NULL
构建的表达式,或者只选择无效月份作为虚拟值:
... ON t1.year = i.published_date_year
AND COALESCE(t1.month, 0) = COALESCE(i.published_date_month, 0)
尽管如此,我几乎看不出这有多大意义。 image
是否会在没有月份的情况下存储数据?