我们需要使用SQL查询语句来从数据库中提取数据。以下是一个可能的SQL查询示例,假设你有一个名为sales
的表,其中包含shop_id
(店铺ID)、product_id
(商品ID)、sku_id
(库存单位ID)、year
(销售年份)和quantity
(销量)字段。
WITH RankedProducts AS (
SELECT
s.shop_id,
p.product_id,
p.sku_id,
p.quantity,
RANK() OVER (PARTITION BY s.shop_id, p.product_id ORDER BY p.quantity DESC) as rank
FROM
sales s
JOIN
products p ON s.product_id = p.product_id AND s.sku_id = p.sku_id
WHERE
s.year = EXTRACT(YEAR FROM CURRENT_DATE)
),
TopProducts AS (
SELECT
shop_id,
product_id,
MAX(quantity) as max_quantity
FROM
RankedProducts
GROUP BY
shop_id, product_id
)
SELECT
rp.shop_id,
rp.product_id,
rp.sku_id,
rp.quantity
FROM
RankedProducts rp
JOIN
TopProducts tp ON rp.shop_id = tp.shop_id AND rp.product_id = tp.product_id AND rp.quantity = tp.max_quantity
WHERE
rp.rank = 1
ORDER BY
rp.shop_id, rp.quantity DESC
LIMIT 5;
这个查询做了以下几件事情:
RankedProducts
公用表表达式(CTE):为每个店铺的每个商品按销量降序排名。TopProducts
CTE:找出每个店铺每个商品销量最高的记录。- 最终查询:结合
RankedProducts
和TopProducts
CTE,选择每个店铺销量最高的前5个商品及其销量最高的SKU。
请注意,这个查询假设products
表存在,并且sales
表与products
表通过product_id
和sku_id
字段关联。你可能需要根据你的实际数据库结构调整这个查询。
此外,这个查询使用了EXTRACT(YEAR FROM CURRENT_DATE)
来获取当前年份,这在某些数据库系统中可能需要调整(例如,使用YEAR(CURRENT_DATE)
)。
如果你的数据库系统不支持窗口函数(如RANK()
),你可能需要使用不同的方法来实现相同的结果。如果你需要针对特定数据库系统的查询帮助,请提供更多的上下文信息。