case 语句和 group by 没有正确分组 (postgresql)
case statement and group by not grouped correctly (postgresql)
当不应该对列进行分组时,如何获得正确的分组。查询得到错误结果
CREATE TABLE inv
(invid int, co int4, type varchar(1), sum int4);
INSERT INTO inv
(invid, co, type, sum)
VALUES
(1, 1,'J',1000),
(2, 1,'O',2000),
(3, 2,'O',3000),
(4, 3,'J',4000),
(5, 4,'J',1000),
(6, 2,'O',2000),
(7, 1,'J',1000)
;
CREATE TABLE co
(coid int, name varchar(30));
INSERT INTO co
(coid, name)
VALUES
(1,'Volvo'),
(2,'BMW'),
(3,'Microsoft'),
(4,'Apple')
;
分组时使用 when 给出错误结果。
SELECT name,type,
CASE
WHEN type ='J' THEN 100
WHEN type ='O' THEN 200
ELSE 0 END AS cost,
sum(sum)
FROM inv
LEFT JOIN co ON coid=co
GROUP BY name,type
沃尔沃出现了两次,因为发票有两种类型。
Volvo J 100 2000
Apple J 100 1000
Microsoft J 100 4000
BMW O 200 5000
Volvo O 200 2000
问题很简单:如何只按公司分组?
我知道以前也有人问过类似的问题,但我找不到任何涉及的案例。
预期输出(不需要类型):
Volvo 300 4000
Apple 100 1000
Microsoft 100 4000
BMW 200 5000
http://sqlfiddle.com/#!15/35c5df/5
TIA
select
name,
sum ( case
when type = 'J' then 100
when type = 'O' then 200
else 0 end
) as cost,
sum("sum") as "sum"
from inv left join co on coid=co
group by name
当不应该对列进行分组时,如何获得正确的分组。查询得到错误结果
CREATE TABLE inv
(invid int, co int4, type varchar(1), sum int4);
INSERT INTO inv
(invid, co, type, sum)
VALUES
(1, 1,'J',1000),
(2, 1,'O',2000),
(3, 2,'O',3000),
(4, 3,'J',4000),
(5, 4,'J',1000),
(6, 2,'O',2000),
(7, 1,'J',1000)
;
CREATE TABLE co
(coid int, name varchar(30));
INSERT INTO co
(coid, name)
VALUES
(1,'Volvo'),
(2,'BMW'),
(3,'Microsoft'),
(4,'Apple')
;
分组时使用 when 给出错误结果。
SELECT name,type,
CASE
WHEN type ='J' THEN 100
WHEN type ='O' THEN 200
ELSE 0 END AS cost,
sum(sum)
FROM inv
LEFT JOIN co ON coid=co
GROUP BY name,type
沃尔沃出现了两次,因为发票有两种类型。
Volvo J 100 2000
Apple J 100 1000
Microsoft J 100 4000
BMW O 200 5000
Volvo O 200 2000
问题很简单:如何只按公司分组?
我知道以前也有人问过类似的问题,但我找不到任何涉及的案例。
预期输出(不需要类型):
Volvo 300 4000
Apple 100 1000
Microsoft 100 4000
BMW 200 5000
http://sqlfiddle.com/#!15/35c5df/5
TIA
select
name,
sum ( case
when type = 'J' then 100
when type = 'O' then 200
else 0 end
) as cost,
sum("sum") as "sum"
from inv left join co on coid=co
group by name