首页 > 解决方案 > 如何在执行多个联接时从单个表中计数

问题描述

我被问到以下问题:根据售出的单位数量而不是订购的单位数量查找供应我们最著名产品的 3 家供应商。将它们排在第一到第三。

使用的数据库是网上的classicmodels db:http ://mysqltutorial.org//tryit/

这就是我所做的,我似乎无法仅计算付款并按供应商分组。我得到的计数是所有连接的乘积。

SELECT p.productvendor FROM products AS p
INNER JOIN orderdetails AS od ON p.productcode = od.productcode
INNER JOIN orders AS o ON o.ordernumber = od.ordernumber
INNER JOIN customers AS c ON c.customernumber = o.customernumber
INNER JOIN payments AS py ON py.customernumber = c.customernumber
GROUP BY p.productvendor 
ORDER BY COUNT(p.productvendor) DESC
LIMIT 3

标签: mysql

解决方案


尝试将问题分解为更小的查询,然后尝试优化连接。

选择 count(p.productvendor) 作为 product_count, p.productvendor from ( JOINS ) group by p.productvendor

            -- this should give count by vendor.  you can use sum(orderdetails.qty) also in case you 

所以问题被简化为在JOINS

JOINS(必须是单个产品销售的集合)


推荐阅读