次のような列があります:
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 ...