PostgreSQL 9.6使用基于列和的case when子句
下面是创建和插入脚本: 如果第1列的和为偶数,则返回其平均值,否则返回0。因此,对于上面的示例,它应该返回[id:1,number1:0] 我试过这个: 它可以与mySql配合使用,但不适用于PostgreSQL(我曾经尝试过)。 PostgreSQL中的错误消息为PostgreSQL 9.6使用基于列和的case when子句,sql,postgresql,aggregate-functions,Sql,Postgresql,Aggregate Functions,下面是创建和插入脚本: 如果第1列的和为偶数,则返回其平均值,否则返回0。因此,对于上面的示例,它应该返回[id:1,number1:0] 我试过这个: 它可以与mySql配合使用,但不适用于PostgreSQL(我曾经尝试过)。 PostgreSQL中的错误消息为 ERROR: column "numbers.id" must appear in the GROUP BY clause or be used in an aggregate function 为什么id的预期值是1而不是
ERROR: column "numbers.id" must appear in the GROUP BY clause or be used in an aggregate function
为什么
id
的预期值是1
而不是2
?这是由查询以任何方式定义的吗?MySql并不关心它,与Postgres(和其他众所周知的RDBMs)相反
如果id
的值可以忽略不计:
select
case
when sum(number1) %2 = 1 then 0
else avg(number1)
end as number1
from numbers;
number1
---------
0
(1 row)
例如,如果要获取id
的最小值:
select
min(id) as id,
case
when sum(number1) %2 = 1 then 0
else avg(number1)
end as number1
from numbers;
id | number1
----+---------
1 | 0
(1 row)
每次在使用聚合函数时选择列时,该列必须位于GROUP BY列表中。这就是错误告诉您的。感谢您的回答,id是一个不重要的行,正如您所说,它导致了问题。
select
case
when sum(number1) %2 = 1 then 0
else avg(number1)
end as number1
from numbers;
number1
---------
0
(1 row)
select
min(id) as id,
case
when sum(number1) %2 = 1 then 0
else avg(number1)
end as number1
from numbers;
id | number1
----+---------
1 | 0
(1 row)