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

如何将含SELECT子查询的产品采购量统计SQL转换为JOIN查询

转换关联子查询为JOIN查询优化性能

优化后的JOIN写法

直接通过INNER JOIN关联两张表,避免逐行子查询的性能损耗:

SELECT p.ProductName AS 'Product Name', SUM(o.quantity) AS 'Total Quantity'
FROM OrderItem o
INNER JOIN Product p ON o.Productid = p.id
GROUP BY p.id, p.ProductName
ORDER BY SUM(o.quantity) DESC

关键说明

  1. 关联逻辑:通过OrderItem.Productid和Product.id建立关联,一次性完成两张表的匹配,替代原查询中每一行都执行一次子查询的低效方式。
  2. 分组规则:GROUP BY同时包含p.id和p.ProductName——因为id是Product表的主键(唯一标识产品),即使存在产品名称重复的情况,也能保证分组的准确性;如果你的业务中ProductName是唯一的,也可以只按p.ProductName分组,但按主键分组更稳妥。
  3. 排序注意:部分数据库对ORDER BY中使用别名的支持有限,直接用SUM(o.quantity)排序兼容性更好,当然如果你的数据库支持(比如MySQL),也可以直接写ORDER BY 'Total Quantity' DESC。

扩展:包含未被采购的产品

如果需要统计所有产品的采购数量(包括从未被采购过的,总数量显示0),可以改用LEFT JOIN并配合COALESCE处理空值:

SELECT p.ProductName AS 'Product Name', COALESCE(SUM(o.quantity), 0) AS 'Total Quantity'
FROM Product p
LEFT JOIN OrderItem o ON p.id = o.Productid
GROUP BY p.id, p.ProductName
ORDER BY COALESCE(SUM(o.quantity), 0) DESC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:54:26