简单查询思路
- 首先通过
orders
表和 products
表根据 product_id
进行连接,计算出每个商品的总销量。
- 对计算出的销量按月份分组,找出每个月销量最高的商品。这可能需要先将
order_time
提取出月份信息,然后通过临时表或者子查询来逐步实现。
复杂查询思路
- 通过
orders
表和 products
表连接,计算每个商品每个月的销量。
- 使用窗口函数,按月份分区,对每个月内的商品销量进行排序,找到每个月销量排名第一的商品。
复杂查询的SQL语句
WITH monthly_sales AS (
SELECT
p.product_name,
SUM(o.quantity) AS total_sales,
EXTRACT(MONTH FROM o.order_time) AS sale_month
FROM
products p
JOIN
orders o ON p.product_id = o.product_id
GROUP BY
p.product_name, EXTRACT(MONTH FROM o.order_time)
)
SELECT
sale_month,
product_name,
total_sales
FROM (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY sale_month ORDER BY total_sales DESC) AS rn
FROM
monthly_sales
) ranked_sales
WHERE
rn = 1;