在 PostgreSQL 中使用 SUM 时从 SELECT 子句中删除列
Remove column from SELECT clause when using SUM in PostgreSQL
我检查了 但没有解决我的问题,因为我什至添加了 else
仍然抛出相同的错误:
ERROR: column table1.column11 must appear in the GROUP BY clause or be used in an aggregate function
我想从 SELECT
中删除 table1.column11
,因为它会影响 GROUP BY
。下面的查询返回一个 table,其中 ENUM
列填充在不同的行中,而不是每个 ENUM
类型都是一行中的一列。
查询示例:
SELECT table1.column11, -- enum column
table2.id,
(case when table1.column11 = 'enum_value_1' then SUM(table1.column12) end) as enum_value_1,
(case when table1.column11 = 'enum_value_2' then SUM(table1.column12) end) as enum_value_2,
--- ...
(case when table1.column11 = 'enum_value_9' then SUM(table1.column19) end) as enum_value_9,
FROM table1
LEFT JOIN table2 ON table2.id = table1.table2_id
WHERE table1.column13 IS NULL
GROUP BY table2.id, table1.column11
ORDER BY table2.id ASC
现在怎么样:
table1.column11 | table2.id | enum_value_1 | enum_value_2 | ... | enum_value_9
================|===========|==============|==============|=====|=============
enum_value_1 | 1 | 10 | [null] | ... | [null]
enum_value_2 | 1 | [null] | 20 | ... | [null]
... | ... | ... | ... | ... | ...
enum_value_9 | 1 | [null] | [null] | ... | 15
我多么希望拥有:
table2.id | enum_value_1 | enum_value_2 | ... | enum_value_9
==========|==============|==============|=====|=============
1 | 10 | 20 | ... | 15
问题中的例子很难重现,但我认为我的建议会有所帮助。从 select 列表中删除 table1.column11
并仅在聚合内使用该列。
所以代替:
SELECT table1.column11, -- enum column
table2.id,
(case when table1.column11 = 'enum_value_1' then SUM(table1.column12) end) as enum_value_1,
使用:
SELECT
table2.id,
sum(case when table1.column11 = 'enum_value_1' then table1.column12 end) as enum_value_1,
我检查了 else
仍然抛出相同的错误:
ERROR: column table1.column11 must appear in the GROUP BY clause or be used in an aggregate function
我想从 SELECT
中删除 table1.column11
,因为它会影响 GROUP BY
。下面的查询返回一个 table,其中 ENUM
列填充在不同的行中,而不是每个 ENUM
类型都是一行中的一列。
查询示例:
SELECT table1.column11, -- enum column
table2.id,
(case when table1.column11 = 'enum_value_1' then SUM(table1.column12) end) as enum_value_1,
(case when table1.column11 = 'enum_value_2' then SUM(table1.column12) end) as enum_value_2,
--- ...
(case when table1.column11 = 'enum_value_9' then SUM(table1.column19) end) as enum_value_9,
FROM table1
LEFT JOIN table2 ON table2.id = table1.table2_id
WHERE table1.column13 IS NULL
GROUP BY table2.id, table1.column11
ORDER BY table2.id ASC
现在怎么样:
table1.column11 | table2.id | enum_value_1 | enum_value_2 | ... | enum_value_9
================|===========|==============|==============|=====|=============
enum_value_1 | 1 | 10 | [null] | ... | [null]
enum_value_2 | 1 | [null] | 20 | ... | [null]
... | ... | ... | ... | ... | ...
enum_value_9 | 1 | [null] | [null] | ... | 15
我多么希望拥有:
table2.id | enum_value_1 | enum_value_2 | ... | enum_value_9
==========|==============|==============|=====|=============
1 | 10 | 20 | ... | 15
问题中的例子很难重现,但我认为我的建议会有所帮助。从 select 列表中删除 table1.column11
并仅在聚合内使用该列。
所以代替:
SELECT table1.column11, -- enum column
table2.id,
(case when table1.column11 = 'enum_value_1' then SUM(table1.column12) end) as enum_value_1,
使用:
SELECT
table2.id,
sum(case when table1.column11 = 'enum_value_1' then table1.column12 end) as enum_value_1,