Sql 将一个表与另一个表的计数结果进行比较,并添加计数为零的名称

Sql 将一个表与另一个表的计数结果进行比较,并添加计数为零的名称,sql,sql-server,Sql,Sql Server,我正在计算一家公司订购了多少次。那么,我只显示如果一家公司订购少于5次。然后,我将其与包含所有公司名称的表进行核对,以查看哪些公司没有订购,哪些公司不会显示在订单表上,然后将其名称添加到显示的列表中。 我所尝试的: Select Orders.CustomerID, Count(Orders.CustomerID) AS OrderCount From Orders Left Join Customers On Orders.CustomerID = Customers.Cust

我正在计算一家公司订购了多少次。那么,我只显示如果一家公司订购少于5次。然后,我将其与包含所有公司名称的表进行核对,以查看哪些公司没有订购,哪些公司不会显示在订单表上,然后将其名称添加到显示的列表中。 我所尝试的:

Select Orders.CustomerID, Count(Orders.CustomerID) AS OrderCount
    From Orders Left Join Customers
    On Orders.CustomerID = Customers.CustomerID 
    Group By Orders.CustomerID
    Having Count(Orders.CustomerID) <5
选择Orders.CustomerID,Count(Orders.CustomerID)作为OrderCount
从左订单加入客户
On Orders.CustomerID=Customers.CustomerID
按订单分组。CustomerID

拥有Count(Orders.CustomerID)如果要使用
左联接
,请交换表名,因为您要显示
客户
的值,否则请使用
右联接

SELECT  Customers.CustomerID, 
        COUNT(Orders.CustomerID) AS OrderCount 
FROM    Customers 
        LEFT JOIN Orders  
           ON Orders.CustomerID = Customers.CustomerID 
GROUP   BY Customers.CustomerID 
HAVING  COUNT(Orders.CustomerID) < 5
试试这个:

SELECT C.CustomerID, C.CustomerName, COUNT(O.CustomerID) AS OrderCount 
FROM Customers C
LEFT JOIN Orders O ON O.CustomerID = C.CustomerID 
GROUP BY C.CustomerID 
HAVING OrderCount < 5
ORDER BY OrderCount, C.CustomerName
选择C.CustomerID、C.CustomerName、COUNT(O.CustomerID)作为OrderCount
来自客户C
O.CustomerID=C.CustomerID上的左连接订单O
按C.CustomerID分组
订单数量小于5的
按订单数量排序,C.客户名称

我尝试了这个方法,但没有得到正确的结果。它缺少2个根本没有订购的客户。它只返回了一个空行作为客户名称。也许你应该看到更新的答案,如果可能的话,添加示例记录。左连接起作用了,我注意到我的措辞中有一个额外的字符,通过它的扳手。一件小事能做什么。顺便问一下,你用的是什么服务器?sql server或mysql?sql server和管理研究请不要鼓励在
HAVING
子句上使用别名。它不是标准的,它只在mysql中工作。您的问题被标记为(一个跨平台的开源RDBMS,现在归Oracle所有)和(一个专有的、来自Microsoft的封闭源代码RDBMS)。你用哪一种?
SELECT  CustomerID 
FROM    Customers c
WHERE   EXISTS 
        (
            SELECT  1
            FROM    Orders o
            WHERE   o.CustomerID = c.CustomerID 
            GROUP   BY CustomerID 
            HAVING  COUNT(CustomerID) < 5
        )
SELECT C.CustomerID, C.CustomerName, COUNT(O.CustomerID) AS OrderCount 
FROM Customers C
LEFT JOIN Orders O ON O.CustomerID = C.CustomerID 
GROUP BY C.CustomerID 
HAVING OrderCount < 5
ORDER BY OrderCount, C.CustomerName