You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写SQL查询多对多关联场景下订单量最高的前5个商品?

订单量Top5商品查询SQL实现

首先多对多关联的Item表和Order表必然存在中间关联表(通常命名为order_item,存储两张表的主键映射关系),以下基于常规表结构给出实现方案:

常规表结构说明

  • Item表核心字段:item_id(商品唯一主键)、item_name(商品名称)等
  • Order表核心字段:order_id(订单唯一主键)等
  • 中间关联表order_item核心字段:order_id(关联订单主键)、item_id(关联商品主键)、quantity(可选,单订单内对应商品购买数量)

按订单数统计(同一订单内同款商品仅计数1次)

适合统计「多少个订单包含该商品」的场景:

SELECT 
    i.item_id,
    i.item_name,
    COUNT(DISTINCT oi.order_id) AS order_quantity
FROM Item i
INNER JOIN order_item oi ON i.item_id = oi.item_id
GROUP BY i.item_id, i.item_name
ORDER BY order_quantity DESC
LIMIT 5;

按销售件数统计(同一订单内同款商品买几件计数几次)

适合统计「商品累计售出多少件」的场景:

SELECT 
    i.item_id,
    i.item_name,
    SUM(oi.quantity) AS sold_quantity
FROM Item i
INNER JOIN order_item oi ON i.item_id = oi.item_id
GROUP BY i.item_id, i.item_name
ORDER BY sold_quantity DESC
LIMIT 5;

语法适配&注意事项

  • 如果你的实际表名、字段名和示例命名不同,替换成对应业务的实际名称即可
  • SQL Server:将开头的SELECT替换为SELECT TOP 5,删除末尾的LIMIT 5
  • Oracle 11g及更早版本:在语句末尾添加WHERE ROWNUM <= 5,12c及以上版本可直接替换LIMIT 5为FETCH FIRST 5 ROWS ONLY

内容的提问来源于stack exchange,提问作者Nikola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:36:04