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

我需要第四列,它必须是 的结果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 回答