来自同一输出的对象总和
sum of objects from same output
我在查询中连接了一些数据库。
我最终希望得到的是 table "wanted_output" 但无法让它工作。
问题出在这一行:
SUM(CASE WHEN Orow.id_offer = Orow.id_offer THEN Orow.money_to_sum ELSE 0 END ) AS sum_money
到目前为止我得到的是:
CREATE TABLE offer
(id int,
offer_name varchar(20),
id_relation int);
INSERT INTO offer
values(1, 12, 1), (2,9, 1),(3,13, 3);
CREATE TABLE relation
(id int,
name VARCHAR(20),
id_group int);
INSERT INTO relation
values(1, 'pietje', 1), (2,'klaasje', 1),(3,'Harry', 3);
CREATE TABLE offer_row
(id int,
name VARCHAR(20),
id_offer int,
money_to_sum int);
INSERT INTO offer_row
values(1, 'some_row_1',1,12.50),(2, 'some_row_2',1, 22.34),(3, 'some_row_1',2, 44.50),(4, 'some_row_1',3, 99.90);
CREATE TABLE wanted_output
(name VARCHAR(20),
money_to_sum int,
sum_money int);
INSERT INTO wanted_output
values('pietje',12.50,79.34),('pietje',22.34,79.34),('pietje', 44.50,79.34),('Harry', 99.90 ,99.90);
SELECT R.name , Orow.money_to_sum ,
SUM(CASE WHEN Orow.id_offer = Orow.id_offer THEN Orow.money_to_sum ELSE 0 END ) AS sum_money
FROM offer O
LEFT JOIN relation R ON R.id = O.id_relation
LEFT JOIN offer_row Orow ON Orow.id_offer = O.id
您描述的是 window 总和:
select r.name, oi.money_to_sum,
sum(oi.money_to_sum) over(partition by r.id) as sum_moyen
from offer o
inner join relation r on r.id = o.id_relation
inner join offer_row oi on oi.id_offer = o.id
Demo on DB Fiddle - 这适用于 SQL 服务器和 MySQL 8.0:
name | money_to_sum | sum_moyen
:----- | -----------: | --------:
pietje | 12.5000 | 79.3400
pietje | 22.3400 | 79.3400
pietje | 44.5000 | 79.3400
Harry | 99.9000 | 99.9000
我在查询中连接了一些数据库。 我最终希望得到的是 table "wanted_output" 但无法让它工作。
问题出在这一行:
SUM(CASE WHEN Orow.id_offer = Orow.id_offer THEN Orow.money_to_sum ELSE 0 END ) AS sum_money
到目前为止我得到的是:
CREATE TABLE offer
(id int,
offer_name varchar(20),
id_relation int);
INSERT INTO offer
values(1, 12, 1), (2,9, 1),(3,13, 3);
CREATE TABLE relation
(id int,
name VARCHAR(20),
id_group int);
INSERT INTO relation
values(1, 'pietje', 1), (2,'klaasje', 1),(3,'Harry', 3);
CREATE TABLE offer_row
(id int,
name VARCHAR(20),
id_offer int,
money_to_sum int);
INSERT INTO offer_row
values(1, 'some_row_1',1,12.50),(2, 'some_row_2',1, 22.34),(3, 'some_row_1',2, 44.50),(4, 'some_row_1',3, 99.90);
CREATE TABLE wanted_output
(name VARCHAR(20),
money_to_sum int,
sum_money int);
INSERT INTO wanted_output
values('pietje',12.50,79.34),('pietje',22.34,79.34),('pietje', 44.50,79.34),('Harry', 99.90 ,99.90);
SELECT R.name , Orow.money_to_sum ,
SUM(CASE WHEN Orow.id_offer = Orow.id_offer THEN Orow.money_to_sum ELSE 0 END ) AS sum_money
FROM offer O
LEFT JOIN relation R ON R.id = O.id_relation
LEFT JOIN offer_row Orow ON Orow.id_offer = O.id
您描述的是 window 总和:
select r.name, oi.money_to_sum,
sum(oi.money_to_sum) over(partition by r.id) as sum_moyen
from offer o
inner join relation r on r.id = o.id_relation
inner join offer_row oi on oi.id_offer = o.id
Demo on DB Fiddle - 这适用于 SQL 服务器和 MySQL 8.0:
name | money_to_sum | sum_moyen :----- | -----------: | --------: pietje | 12.5000 | 79.3400 pietje | 22.3400 | 79.3400 pietje | 44.5000 | 79.3400 Harry | 99.9000 | 99.9000