2017-11-09 18 views
0

で毎日数:私はこのようなSQLクエリでテーブルを表示するSQLクエリ

enter image description here

私は私のクエリを実行している:

select 
    tb_r_orderdata.finishtime as date , 
    count(*)sum all, 
    sum(when status = 'SUCCESS' and issync = '1' then 1 else 0 end) sumpaid, 
    sum(when status = 'SUCCESS' and issync in ('3', '4') then 1 else 0 end) sumfail, 
    sum(when status = 'CLOSED' then 1 else 0 end) sumclose, 
    sum(when status = 'Null' then 1 else 0 end) sumunflag 
from 
    tb_r_orderdata; 

しかし、ときに私はそれを実行し、結果は私が予想したものとは異なります。

enter image description here

あなたがGROUP BYCASEが欠落している任意のヘルプ

答えて

1

いただきありがとうございます::

select tb_r_orderdata.finishtime as date , 
     COUNT(*) as sumall, 
     SUM(CASE WHEN status='SUCCESS' AND issync='1' then 1 ELSE 0 END) as sumpaid, 
     SUM(CASE WHEN status='SUCCESS' AND issync in ('3','4') then 1 ELSE 0 END) as sumfail, 
     SUM(CASE WHEN status='CLOSED' then 1 ELSE 0 END) as sumclose, 
     SUM(CASE WHEN status is null then 1 ELSE 0 END) as sumunflag 
from tb_r_orderdata 
group by tb_r_orderdata.finishtime ; 

MySQLは、数値コンテキストで整数としてブール値を扱う結果はこのようなものですtrueの場合は「1」、falseの場合は「0」となります。クエリを簡略化すると、

select o.finishtime as date , 
     COUNT(*) as sumall, 
     SUM(status = 'SUCCESS' AND issync = '1') as sumpaid, 
     SUM(status = 'SUCCESS' AND issync in ('3', '4')) as sumfail, 
     SUM(status = 'CLOSED') as sumclose, 
     SUM(status is null) as sumunflag 
from tb_r_orderdata o 
where tb_r_orderdata.finishtime is not NULL 
group by o.finishtime ; 

完了時刻はNULLになります。

+0

ya、つまりNullはNULLです。 あなたが言ったようにグループを使用するのを忘れました、あなたの答えに感謝します。私はこの答えを受け入れたいが、私は7分で待たなければならない。どうもありがとうございます。テーブルの上部に問題があり、このような記録がある。 –

+0

上記の答えをチェックしてください。コメントで私はイメージをアップロードできませんので、私は答えを追加します。 –

+0

'NULL'レコードは' finishtime'が 'NULL'であるためです。あなたは 'finishtimeがnullではない'をクエリに追加することでそれをフィルタリングすることができます。 –

0

Explanation in comment for Gordon Linoff

私はあなたの答えをしようと持っていますが、レコードNULLがテーブルの上にあったゴードン・リノフ

にコメントで説明、私はあなたが少しでそれを

を説明することができ、なぜ知りませんゴードンリノフの回答からのビットの変更

select tb_r_orderdata.finishtime as date , 
     SUM(CASE WHEN status='SUCCESS' AND issync='1' then 1 ELSE 0 END) as sumpaid, 
     SUM(CASE WHEN status='SUCCESS' AND issync in ('3','4') then 1 ELSE 0 END) as sumfail, 
     SUM(CASE WHEN status='CLOSED' then 1 ELSE 0 END) as sumclose, 
     SUM(CASE WHEN status='NULL' then 1 ELSE 0 END) as sumunflag 
from tb_r_orderdata 
group by tb_r_orderdata.finishtime 
関連する問題