基于总销量排序商品并在结果表中展示商品及总销量
商品按总销量排序并同步展示销量的实现方案
SQL 场景示例
假设你有商品表 products(含 product_id、product_name 等字段)和订单商品关联表 order_items(含 product_id、quantity 字段),可以通过聚合查询直接获取结果:
SELECT p.product_id, p.product_name, p.price, SUM(oi.quantity) AS total_sales FROM products p JOIN order_items oi ON p.product_id = oi.product_id GROUP BY p.product_id, p.product_name, p.price ORDER BY total_sales DESC;
如果要保留无销量的商品,把 JOIN 换成 LEFT JOIN 即可。
编程语言+ORM 场景示例(以 Django 为例)
利用 ORM 的聚合注解功能,直接给商品模型附加销量字段后排序:
from django.db.models import Sum, Coalesce # 给商品附加总销量字段,无销量时显示0 popular_products = Product.objects.annotate( total_sales=Coalesce(Sum('orderitem__quantity'), 0) ).order_by('-total_sales') # 遍历使用 for item in popular_products: print(f"商品:{item.name},总销量:{item.total_sales}")
核心逻辑总结
- 先通过**聚合函数(SUM/Count)**计算每个商品的总销量
- 关联商品表保留原有商品字段,将销量作为新字段返回
- 直接以聚合得到的销量字段作为排序依据
内容的提问来源于stack exchange,提问作者Paul Stewart
相关产品推荐
相关产品推荐

