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)
答案 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)
就足够了。