SQL TOP 1嵌套查询的语法

时间:2015-03-31 00:38:16

标签: sql

SQL Server的新手,我正在尝试使用前1来在我的代码中使用我的数据库中订单最多的公司,但我还不知道如何正确使用它。我认为只缺少语法。

查询#1工作正常:

SELECT 
    c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande 
FROM 
    Orders O
INNER JOIN 
    Customers C ON O.CustomerID = c.CustomerID
GROUP BY 
    c.CompanyName

我想做什么

SELECT TOP (1) * 
FROM 
    (SELECT 
         c.CompanyName, COUNT(DISTINCT OrderID) AS Nombre_Commande 
     FROM 
         Orders O
     INNER JOIN 
         Customers C ON O.CustomerID = c.CustomerID
     GROUP BY 
         c.CompanyName)  

2 个答案:

答案 0 :(得分:4)

您需要为派生表赋予别名,并且在没有order by子句的情况下指定top是非常没有意义的,因为除非使用order by子句明确指定顺序,否则将行作为没有任何顺序的集合返回:

SELECT TOP (1) * 
FROM (
  SELECT c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande 
  FROM Orders O
  INNER JOIN Customers C ON O.CustomerID=c.CustomerID
  GROUP by c.CompanyName
) AS YourTable
ORDER BY something_meaningful_maybe_nombre_commande?

答案 1 :(得分:2)

这个怎么样?

SELECT TOP 1 c.CompanyName, COUNT(DISTINCT OrderID) as Nombre_Commande
FROM Orders O INNER JOIN
     Customers C
     ON O.CustomerID = c.CustomerID
GROUP by c.CompanyName
ORDER BY Nombre_Commande DESC;

这假定Nombre_Commande是您想要订购的。

顺便说一句,如果此查询确实需要COUNT(DISTINCT),我会感到惊讶。 COUNT(*)COUNT(OrderId)就足够了。