【问题标题】:SQL query to derive average sale of an itemSQL 查询以得出商品的平均销售额
【发布时间】:2022-02-08 18:30:21
【问题描述】:

下面是两张表。一件物品在不同时期以不同的价格出售。我需要计算该商品的平均销售额。我需要找到一个最佳的工作查询。我认为诀窍是将每个销售日期与它们的 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) ;

【问题讨论】:

  • 为什么要使用窗口函数?请编辑您的问题并针对给定的样本数据显示您想要的确切结果。

标签: sql join window-functions


【解决方案1】:
            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; 

【讨论】:

  • 如果在一个销售期内发生了多个销售,查询是否有效?
  • 这个查询给出了正确的结果!
  • 但是我们可以用窗口函数解决同样的问题吗?
【解决方案2】:

请试试这个,

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;

【讨论】:

  • 如果在一个销售期内发生了多个销售,查询是否有效?
  • 是的,它应该可以工作
猜你喜欢
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多