下面是创建和插入脚本:
CREATE TABLE numbers (
id integer NOT NULL,
number1 integer NOT NULL
);
INSERT INTO numbers (id, number1) VALUES
('1', '1'),
('2', '1'),
('1', '2'),
('1', '3');如果number1列总和为偶数,则返回平均值,否则返回0。因此,对于上面的示例,它应该返回id:1,number1 1:0
我已经尝试过了:
select id,
case
when sum(number1) %2=1 then 0 else avg(number1)
end as number1
from numbers它在mySql上运行得很好,但在PostgreSQL上就不行(我是用http://sqlfiddle.com来试用的)。PostgreSQL中的错误消息是
ERROR: column "numbers.id" must appear in the GROUP BY clause or be used in an aggregate function发布于 2017-07-16 23:14:11
为什么id的期望值是1而不是2?这是由查询以某种方式定义的吗?与Postgres (和其他著名的关系型数据库管理系统)相反,MySql并不关心它。
如果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) https://stackoverflow.com/questions/45129912
复制相似问题