Sql 连接两个表并等分值

Sql 连接两个表并等分值,sql,postgresql,Sql,Postgresql,/* Table Costs */ CREATE TABLE costs ( id SERIAL PRIMARY KEY, date DATE, costs_per_day DECIMAL ); INSERT INTO costs (date, costs_per_day) VALUES ('2020-01-01', '400'), ('2020-01-02', '400'), ('2020-01-03', '400'), ('2020-01-04', '400');

/* Table Costs */
CREATE TABLE costs (
    id SERIAL PRIMARY KEY,
    date DATE,
    costs_per_day DECIMAL
);

INSERT INTO costs
(date, costs_per_day)
VALUES 
('2020-01-01', '400'),
('2020-01-02', '400'),
('2020-01-03', '400'),
('2020-01-04', '400');


/* Table Sales Place */
CREATE TABLE sales_place (
    id SERIAL PRIMARY KEY,
    event_date DATE,
    country VARCHAR,
    sales_channel VARCHAR
);

INSERT INTO sales_place
(country, sales_channel)
VALUES 
('DE', 'online'),
('DE', 'store'),
('NL', 'online'),
('NL', 'store'),
('FR', 'online'),
('FR', 'store');
预期结果:

date_list    |   country    |   sales_channel   |      costs_per_day        |
-------------|--------------|-------------------|---------------------------|------
2020-01-01   |     DE       |      online       |      66.66  (=400/6)      |
2020-01-01   |     DE       |      store        |      66.66  (=400/6)      |
2020-01-01   |     NL       |      online       |      66.66  (=400/6)      |
2020-01-01   |     NL       |      store        |      66.66  (=400/6)      |
2020-01-01   |     FR       |      online       |      66.66  (=400/6)      |
2020-01-01   |     FR       |      store        |      66.66  (=400/6)      |
-------------|--------------|-------------------|---------------------------|------
2020-01-02   |     DE       |      online       |      66.66  (=400/6)      |
2020-01-02   |     DE       |      store        |      66.66  (=400/6)      |
2020-01-02   |     NL       |      online       |      66.66  (=400/6)      |
2020-01-02   |     NL       |      store        |      66.66  (=400/6)      |
2020-01-02   |     FR       |      online       |      66.66  (=400/6)      |
2020-01-02   |     FR       |      store        |      66.66  (=400/6)      |
-------------|--------------|-------------------|---------------------------|------ 
2020-01-03   |     DE       |      online       |      66.66  (=400/6)      |
2020-01-03   |     DE       |      store        |      66.66  (=400/6)      |
2020-01-03   |     NL       |      online       |      66.66  (=400/6)      |
2020-01-03   |     NL       |      store        |      66.66  (=400/6)      |
2020-01-03   |     FR       |      online       |      66.66  (=400/6)      |
2020-01-03   |     FR       |      store        |      66.66  (=400/6)      |
-------------|--------------|-------------------|---------------------------|------
2020-01-04   |     DE       |      online       |      66.66  (=400/6)      |
2020-01-04   |     DE       |      store        |      66.66  (=400/6)      |
2020-01-04   |     NL       |      online       |      66.66  (=400/6)      |
2020-01-04   |     NL       |      store        |      66.66  (=400/6)      |
2020-01-04   |     FR       |      online       |      66.66  (=400/6)      |
2020-01-04   |     FR       |      store        |      66.66  (=400/6)      |

我想将表
成本
销售地点
合并起来,这样每天的
成本
平均分配给每个
国家
销售渠道

我尝试了查看方式,但到目前为止无法使其正常工作:

SELECT 
c.date AS date_list,
t1.country,
t1.sales_channel,
c.costs_per_day
FROM costs c
LEFT JOIN

  (SELECT
  sp.country AS country,
  sp.sales_channel AS sales_channel
  FROM sales_place sp
  ORDER BY 1,2) t1 ON t1.country = c.country

ORDER BY 1,2,3;

如何更改查询以获得预期结果?

您的预期输出看起来只是一个交叉连接。我们可以使用
COUNT()

选择
c、 日期,
sp.country,
销售渠道,
c、 每_天成本/计算(*)(按c.date划分)作为每_天成本
来自成本c
交叉连接销售地点sp
订购人
c、 日期;
这里要生成每天的成本,我们只需将每个日期的成本除以交叉连接发生后当天的记录数。这是您更新的DB小提琴:


您的预期输出看起来只是一个交叉连接。我们可以使用
COUNT()

选择
c、 日期,
sp.country,
销售渠道,
c、 每_天成本/计算(*)(按c.date划分)作为每_天成本
来自成本c
交叉连接销售地点sp
订购人
c、 日期;
这里要生成每天的成本,我们只需将每个日期的成本除以交叉连接发生后当天的记录数。这是您更新的DB小提琴:


仅用于我自己的文档:仅用于我自己的文档: