下面两条查询语句是要实现同一个查询效果,由于语句一的查询速度很慢,改成了第二条,但是问题来了,在第二条语句中如果一行中的数据全部为0的话就不会显示出来,要如何修改第二条语句才能让这一行数据全部为0的时候也可以显示出来,实现语句一的查询结果。
语句一:
SELECT
  data_name AS '操作记录',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE TO_DAYS(NOW()) = TO_DAYS(HANDLER_TIME) AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id
       
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '本日',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE TO_DAYS(NOW()) - TO_DAYS(HANDLER_TIME) = 1 AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '昨日',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE YEARWEEK(HANDLER_TIME) = YEARWEEK(NOW()) AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '本周',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE YEARWEEK(HANDLER_TIME) = YEARWEEK(NOW()) - 1 AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '上周',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE DATE_FORMAT(HANDLER_TIME,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m') AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '本月',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE DATE_FORMAT(HANDLER_TIME,'%Y-%m') = DATE_FORMAT(CURDATE(),'%Y-%m') - 1 AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '上月',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE YEAR(HANDLER_TIME) = YEAR(NOW()) AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '本年',
  (SELECT
     COUNT(1)
   FROM mems_trackrecord AS t
   WHERE YEAR(HANDLER_TIME) = YEAR(NOW()) - 1 AND t.auto_rec_flg>=10
       AND t.auto_rec_flg = d.data_id 
       AND t.del_flg = 0
       AND UNIT_CODE = '88888888') AS '上年'
FROM mems_dict AS d
  LEFT JOIN mems_trackrecord t
    ON d.DATA_ID = t.AUTO_REC_FLG
  LEFT JOIN mems_law_evidence a
    ON a.EVI_SN = t.EVI_SN
WHERE LEFT(d.DATA_KIND_CODE,4) = 'CZLX'
    AND data_id >= 10
GROUP BY d.data_name
查询结果:语句二:
SELECT
  d.DATA_NAME AS 操作记录,
COALESCE(SUM( CASE WHEN DAY(t.HANDLER_TIME) = DAY(NOW()) THEN 1 ELSE 0 END ),0)AS 本日,
  SUM( CASE WHEN DAY(t.HANDLER_TIME)-DAY(NOW())=-1 THEN 1 ELSE 0 END ) AS 昨日,
  
  SUM( CASE WHEN WEEK(t.HANDLER_TIME) = WEEK(NOW()) THEN 1 ELSE 0 END ) AS 本周,
  SUM( CASE WHEN WEEK(t.HANDLER_TIME) - WEEK(NOW())=-1 THEN 1 ELSE 0 END ) AS 上周,
  
  SUM( CASE WHEN MONTH(t.HANDLER_TIME) = MONTH(NOW()) THEN 1 ELSE 0 END ) AS 本月,
  SUM( CASE WHEN MONTH(t.HANDLER_TIME) - MONTH(NOW())=-1 THEN 1 ELSE 0 END ) AS 上月,
  
  SUM( CASE WHEN YEAR(t.HANDLER_TIME) = YEAR(NOW()) THEN 1 ELSE 0 END ) AS 本年,
  SUM( CASE WHEN YEAR(t.HANDLER_TIME) - YEAR(NOW())=-1 THEN 1 ELSE 0 END ) AS 上年
FROM mems_dict d
  LEFT JOIN mems_trackrecord t
    ON d.DATA_ID = t.auto_rec_flg
  LEFT JOIN mems_law_evidence a
    ON a.EVI_SN = t.EVI_SN
WHERE t.del_flg = 0
    AND LEFT(d.DATA_KIND_CODE,4) = 'CZLX'
    AND d.DATA_ID >= '10'
GROUP BY d.DATA_ID查询结果MySQL查询