mysqlは最近の7日間のデータを調べて、データがなくて自動的に0を補います。

1900 ワード

転載してからhttps://www.cnblogs.com/snake23/p/9562646.html 作者の華麗なDターン
問題の説明はデータベーステーブルの中で最近の7日間の記録を検索します。
select count(*)、date(createmutime)as date from task where datediff(now()、createmutime)<=6 group by day(createmutime);
しかし、ある日データがないことが分かりました。当日のデータは表示されませんでした。
ここで画像の説明を書きます。
考え方の1:自分のプログラムの中で追加の0を補って処理することができます。
考え方その2:最近の7日間の結果集を構築して、そしてアンケートの結果集と一緒にleft junを作成します。(本文は第二の方式を採用します。)
select a.click_date、b.co unt from(SELECT curdate()as clickuudute union all SELECT dateuuuub(curdate()、interval 1 dadays)as clickcacacacation alalalalalalalalalalalalalalalleCT dateuuuub(curdate((curdate()、interval()、inval l 2 dadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadattttle((((()))))))は、inatttttttttecurdate()、interval 4 day)as click union all SELECT dateub(curdate()、interval 5 day)as clickudute union all SELECT datemusub(curdate()、interval 6 day)as clickuudaatjin(select date date(createtsutime)as datetime、count(afterval 6 dadattttttmmmmmdadadadadadadattttttttttttttttttttttttttttdadadadadadat)a(当日)a)a a a a aaaaaaaatststst(cacacat(cat(cat)a)a)a)a.ra08-28結果はNULLと表示されます。
ここで画像の説明を書きます。
NULLを0に設定してifnull関数を利用すればいいです。
select a.click_date,ifnull(b.count,0) as count
from (
    SELECT curdate() as click_date
    union all
    SELECT date_sub(curdate(), interval 1 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 2 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 3 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 4 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 5 day) as click_date
    union all
    SELECT date_sub(curdate(), interval 6 day) as click_date
) a left join (
  select date(    ) as datetime, count(*) as count
  from   
  group by date(    )
) b on a.click_date = b.datetime;