2017-07-05 27 views
0

之间更大的我有3个表:MySQL的 - 的东西至少有一个,比3个表

enter image description here

我需要检索一月至少一个产品中所出售的卖家的名称,其中的一月份销售该产品说的总量大于1000

我想过开始是这样的:

SELECT c.nom, c.prenom 
FROM Commerciaux c 
LEFT JOIN Ventes v ON c.id_commerciaux = v.id_commerciaux 
WHERE EXISTS (SELECT 1 
FROM Produits p, Ventes v 
WHERE p.id_produits = v.id_produits 
AND MONTH(v.date) = 1 
GROUP BY p.nom 
HAVING SUM(v.montant) > 200) 
AND MONTH(v.date) = 1 
GROUP BY c.nom, c.prenom 

的SELEC T在WHERE EXISTS似乎正在工作,但是当我必须链接表Sellers时,我不知道如何写它。

任何帮助将是伟大的!

回答

1

您可以使用这样的事情:

select distinct s.name 
from Sellers s, 
    ( -- get all those products that qualify (more than 1000 sales) 
     select product_id, sum(amount) as total 
     from Sales 
     where Month(date) = 1 
     group by product_id 
     having total > 1000 
    ) vp, 
    Sales sa 
where 
    s.id = sa.commercial_id and 
    sa.product_id = vp.id and 
    Month(sa.date) = 1 

@Leo答案将返回只有那些在1月份销售超过100的产品,而不是返回所有的卖家卖家已经出售了任何金额超过1000的产品。

+0

你说得对。我试过你的,但它返回两个卖家,而不是它应该的。 – Komarzer

+0

哦,我认为你一直在寻找所有在1月份销售过任何数量产品的卖家,只要该产品在1月份的销售量大于1000,而不管卖家。举例来说,如果1月份的产品1的销售量大于1000,卖方1的销售量仅为5,而卖方2的销售量为999,那么我就会返回两者。 – MikeOhMeelah

1

你可以使用一个嵌套查询:

SELECT s.name FROM 
    (Sellers as s JOIN Sales as sp on sp.commercial_id = s.id) JOIN 
    Product as p on p.id = sp.product_id 
    WHERE MONTH(sp.date) = 1 AND YEAR(sp.date) = 2017 AND  
    (SELECT SUM(Amount) FROM Sales as sp2 WHERE sp2.commercial_id = s.id 
    AND sp2.product_id = p.id 
    AND MONTH(sp2.date) = 1 AND YEAR(sp2.date) = 2017) > 1000 

首先,加入外键的三个表,然后运行一个嵌套查询来计算特定产品所选择的卖家的数量进行检查,通过数量限制。

1

试试这个

SELECT C.name 
FROM Sales A 
JOIN Product B ON A.produit_id = B.id 
JOIN Seller C ON A.commercial_id = C.id 
WHERE MONTH(A.date) = 1 
HAVING SUM(A.nAmount) > 100 
GROUP BY C.name 
+0

您还需要将'product_id'添加到GroupBy子句中。 – OmG

+0

似乎在工作谢谢! @OmG我做了你说的也谢谢 – Komarzer

相关问题