我有一个类似这样的专栏:

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

我想把它放在我的GROUP BY子句中,但这似乎会引起问题,因为列中有一个聚合函数.在这种情况下,有没有办法按列别名(如some_product)分组,或者我需要将其放入子查询中并对其分组?

推荐答案

我猜你并不是真的想买一些产品.

answer to:"在这种情况下,是否有办法将某个列别名(例如某个_产品)设置为GROUP BY,或者我需要将其放入子查询并对其进行分组?"is:不能使用列别名.

指定列别名的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 ...

CTE:

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 ... 

Sql相关问答推荐

PostgreSQL集群不间断的数据系列

Click house在数组中生成X行Y随机数

使用group by后我的平均输出不是我想要的

Postgres:对包含数字的字符串列表进行排序

从日期开始向前填充重复项

PostgreSQL使用SQL子查询在时间间隔内 Select 数据

对列进行排序后,基于两列删除重复行

将Dense_RANK列为聚合(非解析)函数(&A)

如何找到一个组合的两个列,这是不是在其他表在ORACLE SQL?

SQL Athena/prest判断值是否在嵌套的json数组中

对于多字节字符,SQL Server中的DATALENGTH返回1字节

将JSON文件导入Postgres 16数据库时出错(22P04上次预期列之后的额外数据)

使用多个WITH子查询的替代方法

如何对 jsonb 中的字段执行求和,然后使用结果过滤查询的输出

基于字符串的SQL查询

如何将特定值从 JSON 列中的一个字段移动到 PostgreSQL 中的另一个字段?

如何将 CONCATENATED 值与临时表中的值匹配

计算 SQL 中的总体成功率:递归 CTE 还是替代方法?

并非所有变量都绑定在 PL SQL 函数中

为什么 Oracle 在一个查询中对同一张表同时执行 TABLE SCAN 和 INDEX UNIQUE SCAN?