集計関数を使用したSQL GROUP BY CASEステートメント 質問する

集計関数を使用したSQL GROUP BY CASEステートメント 質問する

次のような列があります:

CASE
    WHEN col1 > col2 THEN SUM(col3*col4)
    ELSE 0
END AS some_product

これを GROUP BY 句に入れたいのですが、列に集計関数があるため、問題が発生しているようです。some_productこの場合のように列エイリアスを GROUP BY する方法はありますか。それとも、これをサブクエリに入れて、その上でグループ化する必要がありますか。

ベストアンサー1

私の推測では、some_product を本当に望んでいるわけではないと思いますGROUP BY

に答えます:GROUP BY「この場合、some_product などの列エイリアスを使用する方法はありますか、それともこれをサブクエリに入れてグループ化する必要がありますか?」は:GROUP BY列の別名は設定できません。

列エイリアスが割り当てられている句SELECTは、句の後まで処理されませんGROUP BY。インライン ビューまたは共通テーブル式 (CTE) を使用して、結果をグループ化できるようにすることができます。

インラインビュー:

select ...
from (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... ) T
group by some_product ...

熱膨張係数:

with T as (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... )
select ...
from T
group by some_product ... 

おすすめ記事