2016-09-26 6 views
1

私の質問は、関数sum(days)を使用し、それを私のクエリ内で再利用することです。SQLを使用して合計(日)

select 
    new_client, 
    sum(days) as effort 
from actuals 
where week >='01/01/2016' 
    and type is null 
    and sum(days) = 0 
group by new_client 
order by effort desc 

これはうまくいきません。私は上記のことをどうやって行うのだろうと思っていた。

+3

サンプルテーブルのデータと期待される結果を(書式付きのテキストで)表示します – jarlh

+0

再利用の意味は? – TheGameiswar

+1

日のフィールドは何ですか? –

答えて

3
select new_client, sum(days) as effort 
from actuals 
where week >='01/01/2016' and type is null       
group by new_client 
having sum(days) = 0 
order by effort desc 

何かこれはうまくいくはずですか? where句でSUM()を使用することはできません。それがHAVINGが存在する理由です。

なぜ結果があるかは常に0と表示されるため、SUM(日)を選択することをお勧めします。

+0

jensに感謝してください。あなたが引っ張った疑問を尋ねる私の愚かな試みであっても。 –

1

daysがマイナスになることはありませんならば、あなたも行うことができます:それは集約前にフィルタ処理を行いますので、

select new_client, sum(days) as effort 
from actuals 
where week >= '2016-01-01' and type is null and days > 0 
group by new_client 
order by effort desc; 

これは、より効率的です。しかし、@ジェンスの答えはより一般的です。

1


こんにちは、あなたは、クエリ

select new_client, sum(days) as effort 
from actuals 
where week >='01/01/2016' and type is null 
group by new_client 
having sum(days) = 0 
order by effort desc 

Explinationの下に使用することができます

非常に良い質問

句が一度実行されたすべての条件を実行している持ちながら句は、現在の条件を実行

。すなわちHAVINGは条件の結果に対して実行し、WHEREは行ごとにデータを実行または処理します。シンプルな方法で、WHERE句は前フィルタ、HAVING句はポストフィルタです

関連する問題