2017-09-27 15 views
0

私は両方のSUM関数の結果を合計してみてください、このクエリを使用した:私はこの行にすることをやろうどのようにSUM結果両方のSUM SQL?

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult, 
SUM(result + noresult) 
from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day` 

SUM(result + noresult) 
+0

は、なぜあなたはSUM(結果+ noresult) –

+2

使用 'SUMをやって別のクエリの周りにクエリをラップしていない(場合(ステータス= '1'、1、0))+ SUM(IF(ステータス= '2'、1、0)) 'を使用します。 –

答えて

1

を。しかし、それをよりきれいに保つために、SUMフィールドの両方を合計するのではなく、両方の条件を組み合わせることができます。

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult, 
SUM(if(status = '1' OR status = '2', 1, 0)) AS newcolumn 
from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day` 
+0

@ Joel Coehoornの回答は、これらの2つ以上を一緒に追加したい場合は、よりきれいになるかもしれません。 – kchason

2

選択した列に別名を使用することはできませんが、あなたがする必要のある名前別のSQL句が特定の順序で処理されるため、その後でグループを選択して、どこであなたがしてから最初の(コードを繰り返す必要があり、コードに

select 
DAY(created_at) AS day, 
SUM(if(status = '1', 1, 0)) AS result, 
SUM(if(status = '2', 1, 0)) AS noresult, 
SUM(if(status = '1', 1, 0)) + SUM(if(status = '2', 1, 0)) AS all_result 

from `clients` where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) group by `day` 

を繰り返します....等。)ので、別名を解析し、選択の瞬間にSQLエンジンには使用できません

+0

認めてください、それはひどく見えます – OPV

+0

@ PM77-1おかげさまで余分な和が取り除かれました.. – scaisEdge

+1

@OPV。 SQL句が特定の順序で処理されている可能性があります(まずはそこから選択し、グループ化して....など)。そのため、選択された構文解析の時点でSQLエンジンはエイリアスを利用できません – scaisEdge

3

このお試しください:いくつか他の人が述べたように、あなたはselect文で別名を使用することはできません

select 
    DAY(created_at) AS day, 
    SUM(if(status = '1', 1, 0)) AS result, 
    SUM(if(status = '2', 1, 0)) AS noresult, 
    SUM(if(status in ('1', '2'), 1, 0)) 
from `clients` 
where `doctor_id` = 2 and MONTH(created_at) = MONTH(CURRENT_TIMESTAMP) 
group by `day`