• LeetCode 1251. 平均售价


    题目链接:1251. 平均售价

    题目描述

    表:Prices

    Column NameType
    product_idint
    start_datedate
    end_datedate
    priceint

    (product_id,start_date,end_date) 是 prices 表的主键(具有唯一值的列的组合)。
    prices表的每一行表示的是某个产品在一段时期内的价格。 每个产品的对应时间段是不会重叠的,这也意味着同一个产品的价格时段不会出现交叉。

    表:UnitsSold

    Column NameType
    product_idint
    purchase_datedate
    unitsint

    该表可能包含重复数据。
    该表的每一行表示的是每种产品的出售日期,单位和产品 id。

    编写解决方案以查找每种产品的平均售价。average_price 应该四舍五入到小数点后两位,返回结果表无顺序要求
    结果格式如下例所示。

    输入:
    Prices table:

    product_idstart_dateend_dateprice
    12019-02-172019-02-285
    12019-03-012019-03-2220
    22019-02-012019-02-2015
    22019-02-212019-03-3130

    UnitsSold table:

    product_idpurchase_dateunits
    12019-02-25100
    12019-03-0115
    22019-02-10200
    22019-03-2230

    输出:

    product_idaverage_price
    16.96
    216.96

    解释:

    平均售价 = 产品总价 / 销售的产品数量。
    产品 1 的平均售价 = ((100 * 5)+(15 * 20) )/ 115 = 6.96
    产品 2 的平均售价 = ((200 * 15)+(30 * 30) )/ 230 = 16.96

    题目分析

    扫一眼左连接,时间范围匹配,分组求值,保留两位。OK,开始问神奇的海螺:
    在这里插入图片描述
    替换题目中的各值:

    SELECT u.product_id, units * price as totalprice, u.units
    FROM UnitsSold u
             LEFT JOIN Prices p
                       ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id 
    
    • 1
    • 2
    • 3
    • 4

    效果非常好!
    在这里插入图片描述
    接下来分组、计算均价、保留两位:

    SELECT p.product_id, ROUND(sum(units * price) / sum(units), 2) as average_price
    FROM Prices p
             LEFT JOIN UnitsSold u
                       ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
    group by p.product_id
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行!
    在这里插入图片描述
    好好好,再套一个非空,下班。

    代码

    SELECT p.product_id, COALESCE(ROUND(sum(units * price) / sum(units), 2), 0) as average_price
    FROM Prices p
             LEFT JOIN UnitsSold u
                       ON (u.purchase_date BETWEEN p.start_date AND p.end_date) AND u.product_id = p.product_id
    group by p.product_id
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    好,又一段人下人代码,海螺全责🐚

  • 相关阅读:
    [nlp] 索引:正向索引&倒排索引
    MySQL基础
    区块链(1):区块链简介
    C++之9|容器与迭代器
    java计算机毕业设计贵州农产品交易系统源码+mysql数据库+系统+lw文档+部署
    商空间的理解(Quotient space)
    关于安卓自定义弹幕控件的实现(recyclerview)(一)
    计算机服务器中了faust勒索病毒怎么解密,faust勒索病毒解密工具流程
    crontab的配置参数和基础使用教程
    一、python基础语法
  • 原文地址:https://blog.csdn.net/weixin_44122062/article/details/133705097