MySQL-带条件的操作

MySQL-带条件的操作,mysql,date,time,sum,Mysql,Date,Time,Sum,我尝试使用三个类似的if条件执行求和运算,格式如下: 第一个: 如果TIME_TO_SECTIMEDIFFIFTIME='0000-00-00 00:00:00',sysdate、TIME、TIME2>高或TIME为NULL且TIME3!='0000-00-00 00:00:00'和日期格式时间2,'%Y-%m-%d%H:%i'值和TIME3!='0000-00-00 00:00:00'和日期格式时间2,'%Y-%m-%d%H:%i'0和TIME3!='0000-00-00 00:00:00'和

我尝试使用三个类似的if条件执行求和运算,格式如下:

第一个:

如果TIME_TO_SECTIMEDIFFIFTIME='0000-00-00 00:00:00',sysdate、TIME、TIME2>高或TIME为NULL且TIME3!='0000-00-00 00:00:00'和日期格式时间2,'%Y-%m-%d%H:%i' 第二个:

ifTIME_TO_sectimediftime='0000-00-00 00:00:00',sysdate,TIME,TIME2>值和TIME3!='0000-00-00 00:00:00'和日期格式时间2,'%Y-%m-%d%H:%i' 第三个:

ifTIME_TO_sectimediftime='0000-00-00 00:00:00',sysdate,TIME,TIME2>0和TIME3!='0000-00-00 00:00:00'和日期格式时间2,'%Y-%m-%d%H:%i' 从两个表中选择两个不同的字段列作为高值

不幸的是,我似乎无法做到这一点,最可能的原因是这些句子不能相加

如何做到这一点

编辑:添加了整个查询:

SELECT VALUE1 ,
 COUNT( * ) TOTAL 
 from ( 
  SELECT (
   if((TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) > high OR TIME IS NULL) AND TIME3 != '0000-00-00 00:00:00' AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i')) + 
   if(TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) > value AND TIME3 != '0000-00-00 00:00:00' AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i')) + 
   if(TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) >0 AND TIME3 != '0000-00-00 00:00:00' AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i'))) as 'ok',
if((TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) > high OR TIME IS NULL) AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i'),4, 
if(TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) > value AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i'),3, 
if(TIME_TO_SEC(TIMEDIFF(IF(TIME = '0000-00-00 00:00:00',sysdate() , TIME ), TIME2)) >0 AND DATE_FORMAT(TIME2, '%Y-%m-%d %H:%i') < DATE_FORMAT(now(), '%Y-%m-%d %H:%i'),2, 
if(TIME >'0000-00-00 00:00:00', 1,0) ))) VALUE1 
FROM table1 , table2 left outer join table3 on( value2 = value3 ) where id_param='col1' and col2 = DATE_FORMAT(if(CURTIME()>='00:00:00' and CURTIME() < '08:00:00',sysdate() - INTERVAL 1 DAY, sysdate()), '%Y-%m-%d') ) as datos GROUP BY VALUE1
这将返回一个2列x3rows表,其中包含“ok”、“4”、“3”和“2”的值。

您可以这样做

SELECT (if_cond1 + if_cond2 + if_cond3) as `x` FROM...
根据上述IFs扩展if条件1、2、3

如果您想简化SQL一旦扩展得非常大时的外观,您可以使用。

您可以这样做

SELECT (if_cond1 + if_cond2 + if_cond3) as `x` FROM...
根据上述IFs扩展if条件1、2、3


如果您想简化SQL一旦扩展得很大时的外观,可以使用。

不幸的是,它似乎不起作用。也许我做错了什么。如果没有db结构+示例数据,那么在一秒钟内将整个查询添加到主帖子中是没有帮助的。无论如何,试着递增,如果一次增加一个,看看哪里没有增加。假设没有语法错误。不幸的是,它似乎不起作用。也许我做错了什么。如果没有db结构+示例数据,那么在一秒钟内将整个查询添加到主帖子中是没有帮助的。无论如何,试着递增,如果一次增加一个,看看哪里没有增加。假设没有语法错误。