2

CASE次のようなステートメントを使用して、PostgreSQL で SQL クエリを実行しています。

SELECT
    CASE column1
        WHEN something THEN 10
        ELSE 20
        END AS newcol1
    CASE column12
        WHEN something THEN 30
        ELSE 40
        END AS newcol2
COUNT(column3) newcol3
FROM table
GROUP BY newcol1,newcol2,newcol3

の結果である必要がある 4 番目の列が必要newcol2 * newcol3です。どうすればそれを行うことができますか?

置く(newcol2 * newcol3) AS newcol4と、構文エラーが発生します。

4

2 に答える 2

4

CTE を使用して、物事を別のレベルに抽象化することができます。それが役立つ場合は、...

With CTE as
(
 SELECT
  CASE column1
    WHEN something THEN 10
    ELSE 20
    END AS newcol1,
  CASE column12
    WHEN something THEN 30
    ELSE 40
    END AS newcol2,
  column3,
 FROM table
)
SELECT
  newcol1, newcol2,
  count(column3) as newcol3,
 (newcol2 * newcol3) AS newcol4
FROM CTE 
GROUP BY newcol1,newcol2,newcol3
于 2013-03-15T16:56:50.027 に答える
2

CTE は有効なアプローチであり、追加のオプションを提供します。
このような単純なケースでは、単純なサブクエリの方が単純で、わずかに高速です。

SELECT *, (newcol2 * newcol3) AS newcol4
FROM  (
   SELECT CASE column1
            WHEN something THEN 10
            ELSE 20
            END AS newcol1
         ,CASE column12
            WHEN something THEN 30
            ELSE 40
            END AS newcol2
        ,COUNT(column3) AS newcol3
   FROM  table
   GROUP BY 1, 2
   ) AS sub

ところで: から削除newcol3しましGROUP BYた。集計関数を実行しているためですcount()。これは少し無意味です。

于 2013-03-16T01:03:54.223 に答える