我有一个运行了4个月的mysql表,该表中有一个select语句,如下所示。
SELECT
CONCAT(
YEAR(FROM_UNIXTIME(creation_time)),
'-',
IF(
MONTH(FROM_UNIXTIME(creation_time)) < 10,
CONCAT('0', MONTH(FROM_UNIXTIME(creation_time))),
MONTH(FROM_UNIXTIME(creation_time))
)
) AS Period,
(
COUNT(CASE
WHEN system_name = 'System' THEN 1
ELSE NULL
END)
) AS "Some data",
FROM table_name
GROUP BY
Period
ORDER BY
Period DESC
最近,我添加了一个新功能和一个专栏 is_rerun
. 此值只是添加的,以前不存在。现在,我想用current语句编写一个查询来检查 system_name
还有 is_rerun
字段,如果该字段存在且值为1,则返回1;如果该列不存在或其值为零,则返回null。
我试过了 IF EXISTS re_run THEN 1 ELSE NULL
,但运气不好。我也可以为以前的运行插入值,但我不想这样做。有什么解决办法吗。谢谢。
SELECT
CONCAT(
YEAR(FROM_UNIXTIME(creation_time)),
'-',
IF(
MONTH(FROM_UNIXTIME(creation_time)) < 10,
CONCAT('0', MONTH(FROM_UNIXTIME(creation_time))),
MONTH(FROM_UNIXTIME(creation_time))
)
) AS Period,
(
COUNT(CASE
WHEN system_name = 'System' AND IF EXISTS is_rerun THEN 1
ELSE NULL
END)
) AS "Some data",
FROM table_name
GROUP BY
Period
ORDER BY
Period DESC
1条答案
按热度按时间8e2ybdfx1#
作为初学者:你有一个
group by
查询,所以您需要is_rerun
在聚合函数中。根据你的描述,我认为
case(case when is_rerun = 1 then 1 end)
应该做的工作:它回来了1
如果有的话is_rerun
组中的1
,否则null
.或者如果你能忍受
0
而不是null
,则可以使用更简单的表达式:max(is_rerun = 1)
.请注意,您的查询可以在很大程度上简化为日期格式化逻辑和条件计数。我可以这样说: