SQL 查询商品的平均销售额
SQL query to derive average sale of an item
下面是两个表格。一件商品在不同时期以不同的价值出售。我需要计算商品的平均销售额。我需要找到一个最佳的工作查询。我认为诀窍是将每个销售日期与他们的 start_date 和 end_date 映射起来,并将数量乘以该期间各自的价格,然后使用公式总销售额/总数量得出平均数。
CREATE TABLE sales(
item_id varchar(255) ,
start_date date ,
end_date date,
price int
) ;
insert into sales values
('mobile','2021-01-01','2021-01-05',500),
('mobile','2021-01-06','2021-01-09',400),
('mobile','2021-01-10','2021-01-15',900) ;
CREATE TABLE item(
sales_id int,
item_id varchar(255) ,
sales_date date ,
quatity int
) ;
insert into item values
(101,'mobile','2021-01-01',10),
(102,'mobile','2021-01-06',20),
(103,'mobile','2021-01-15',30) ;
select item_id, sum(total_amount)/sum(quatity) avg_price from
(
select s.item_id, s.price, i.quatity, s.price * i.quatity as total_amount
from sales s, item i where i.item_id = s.item_id
and i.sales_date between s.start_date and s.end_date
) as A
group by item_id;
请试试这个,
SELECT
i.item_id,avg(s.price*i.quatity) FROM
item I
LEFT JOIN
sales S
on
I.item_id=S.item_id
AND I.sales_date >=S.start_date AND I.sales_date<=S.end_date
group by i.item_id;
下面是两个表格。一件商品在不同时期以不同的价值出售。我需要计算商品的平均销售额。我需要找到一个最佳的工作查询。我认为诀窍是将每个销售日期与他们的 start_date 和 end_date 映射起来,并将数量乘以该期间各自的价格,然后使用公式总销售额/总数量得出平均数。
CREATE TABLE sales(
item_id varchar(255) ,
start_date date ,
end_date date,
price int
) ;
insert into sales values
('mobile','2021-01-01','2021-01-05',500),
('mobile','2021-01-06','2021-01-09',400),
('mobile','2021-01-10','2021-01-15',900) ;
CREATE TABLE item(
sales_id int,
item_id varchar(255) ,
sales_date date ,
quatity int
) ;
insert into item values
(101,'mobile','2021-01-01',10),
(102,'mobile','2021-01-06',20),
(103,'mobile','2021-01-15',30) ;
select item_id, sum(total_amount)/sum(quatity) avg_price from
(
select s.item_id, s.price, i.quatity, s.price * i.quatity as total_amount
from sales s, item i where i.item_id = s.item_id
and i.sales_date between s.start_date and s.end_date
) as A
group by item_id;
请试试这个,
SELECT
i.item_id,avg(s.price*i.quatity) FROM
item I
LEFT JOIN
sales S
on
I.item_id=S.item_id
AND I.sales_date >=S.start_date AND I.sales_date<=S.end_date
group by i.item_id;