Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果总和大于或等于2,则SQL选择记录_Mysql_Sql_Sql Server_Tsql_Group By - Fatal编程技术网

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