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小提琴:
仅用于我自己的文档:仅用于我自己的文档: