Mysql 如果总和大于或等于2,则SQL选择记录
我想显示公司名称和公司供应的产品数量,只要产品数量超过两个 以下是供应商表的摘录:Mysql 如果总和大于或等于2,则SQL选择记录,mysql,sql,sql-server,tsql,group-by,Mysql,Sql,Sql Server,Tsql,Group By,我想显示公司名称和公司供应的产品数量,只要产品数量超过两个 以下是供应商表的摘录: SupplierID CompanyName . . . 1 Exotic Liquids 2 New Orleans Cajun 3 Grandma Kelly's . . 以下是产品表的摘录: ProductId ProductName SupplierID CategoryID . . 1
SupplierID CompanyName . . .
1 Exotic Liquids
2 New Orleans Cajun
3 Grandma Kelly's
.
.
以下是产品表的摘录:
ProductId ProductName SupplierID CategoryID . .
1 Chai 1 1
2 Chang 1 1
3 Aniseed Syrup 1 2
4 Cajun Seasoning 2 2
5 Gumbo Mix 2 2
6 Berry Spread 3 2
.
.
我使用的SQL代码:
SELECT S.CompanyName , (SUM(P.SupplierID)) AS 'Number of Products'
FROM Suppliers S, Products P
WHERE P.SupplierID = S.SupplierID
GROUP BY S.CompanyName
ORDER BY SUM(P.SupplierID) >= 3
对于上面的代码,MSSQL服务器在'>'附近给了我一个错误语法。
错误。
我不知道如何修复此问题,以获得如下结果:
CompanyName Number of Products
Exotic Liquids 5
New Orleans Cajun 8
Grandma Kelly's 3
任何帮助都将不胜感激。您需要一个
条款来过滤每个公司的产品数量。即使在MySQL中,查询不会失败,也不会满足您的需求:它会将拥有3个或更多产品的公司放在第一位,但不会从结果集中逐出
也可以考虑使用标准连接,而不是旧的,隐式连接。< /P>
select s.companyName, count(*) no_products
from suppliers s
inner join products p on p.supplierID = s.supplierID
group by s.supplierID, s.companyName
having count(*) >= 3
order by s.supplierID
请注意,在SQL Server中,您也可以使用横向联接来实现此目的,这可能更有效:
select s.*, p.no_products
from suppliers
cross apply (select count(*) no_products from products p where p.supplierID = s.supplierID) p
where p.no_products >= 3
order by s.supplierID
Microsoft SQL Server或MySQL?你的意思是用代替按
订购吗?非常感谢,我现在明白我的错误了。@EttienneVanZyl:没问题!谢谢。请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票。
SELECT
S.CompanyName
, 'Number of Products' = SUM(1)
FROM @Supplier S
JOIN @Product P ON P.SupplierID = S.SupplierID
GROUP BY
S.CompanyName
HAVING SUM(1) > 2