LeetCode //MySQL - 1251. Average Selling Price

1251. Average Selling Price

Table: Prices

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| product_id | int |

| start_date | date |

| end_date | date |

| price | int |

±--------------±--------+

(product_id, start_date, end_date) is the primary key (combination of columns with unique values) for this table.

Each row of this table indicates the price of the product_id in the period from start_date to end_date.

For each product_id there will be no two overlapping periods. That means there will be no two intersecting periods for the same product_id.

Table: UnitsSold

±--------------±--------+

| Column Name | Type |

±--------------±--------+

| product_id | int |

| purchase_date | date |

| units | int |

±--------------±--------+

This table may contain duplicate rows.

Each row of this table indicates the date, units, and product_id of each product sold.

Write a solution to find the average selling price for each product. average_price should be rounded to 2 decimal places. If a product does not have any sold units, its average selling price is assumed to be 0.

Return the result table in any order.

The result format is in the following example.

Example 1:

Input:

Prices table:

±-----------±-----------±-----------±-------+

| product_id | start_date | end_date | price |

±-----------±-----------±-----------±-------+

| 1 | 2019-02-17 | 2019-02-28 | 5 |

| 1 | 2019-03-01 | 2019-03-22 | 20 |

| 2 | 2019-02-01 | 2019-02-20 | 15 |

| 2 | 2019-02-21 | 2019-03-31 | 30 |

±-----------±-----------±-----------±-------+

UnitsSold table:

±-----------±--------------±------+

| product_id | purchase_date | units |

±-----------±--------------±------+

| 1 | 2019-02-25 | 100 |

| 1 | 2019-03-01 | 15 |

| 2 | 2019-02-10 | 200 |

| 2 | 2019-03-22 | 30 |

±-----------±--------------±------+

Output:

±-----------±--------------+

| product_id | average_price |

±-----------±--------------+

| 1 | 6.96 |

| 2 | 16.96 |

±-----------±--------------+

Explanation: Average selling price = Total Price of Product / Number of products sold.

Average selling price for product 1 = ((100 * 5) + (15 * 20)) / 115 = 6.96

Average selling price for product 2 = ((200 * 15) + (30 * 30)) / 230 = 16.96

From: LeetCode

Link: 1251. Average Selling Price


Solution:

Ideas:
  • Join Prices and UnitsSold on:
    • same product_id
    • purchase_date within start_date and end_date
  • For each product:
    • Compute total revenue = SUM(price * units)
    • Compute total units sold = SUM(units)
    • Average price = total revenue / total units
  • Use LEFT JOIN so products with no sales are included.
  • Use IFNULL(..., 0) to return 0 when a product has no sold units.
  • Round the result to 2 decimal places using ROUND().
Code:
sql 复制代码
# Write your MySQL query statement below
SELECT
    p.product_id,
    IFNULL(ROUND(SUM(p.price * u.units) / SUM(u.units), 2), 0) AS average_price
FROM Prices p
LEFT JOIN UnitsSold u
    ON p.product_id = u.product_id
   AND u.purchase_date BETWEEN p.start_date AND p.end_date
GROUP BY p.product_id;
相关推荐
醇氧2 小时前
MySQL 8.0 系统表损坏与引擎转换故障排查实战
数据结构·算法
Escalating_xu2 小时前
【C语言数据类型和变量·上】从内置类型到变量模型:一次讲透 sizeof、signed/unsigned 与作用域
c语言
大熊背2 小时前
《Color constancy by characterization of illumination chromaticity》之色度色域最大化算法(二)
算法·白平衡·色度·色温
钓鱼的肝3 小时前
梳理(1-5)
c++·经验分享·笔记·算法·青少年编程
aramae3 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
参.商.3 小时前
【Day 53】76. 最小覆盖子串
leetcode·golang
HZZD_HZZD3 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法
shirsl5 小时前
算法 Day 5 树 / 二叉树 + DFS
数据结构·python·算法