如何在执行多个联接时从单个表进行计数

时间:2018-09-16 05:45:03

标签: mysql

有人问我以下问题: 找到3家供应我们最著名产品的供应商(按已售出的数量而不是订购的数量)。将他们排名第一到第三。

使用的数据库是在线classicmodels数据库: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

1 个答案:

答案 0 :(得分:0)

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

选择count(p.productvendor)作为product_count,从( JOINS )组中按p.productvendor选择p.productvendor

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

因此问题被减少到了 JOINS

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