简体   繁体   English

带CTE的SQL Select

[英]SQL Select with CTE

What I'm trying to do is get the name of the city with biggest number of orders. 我想做的是获得订单数量最多的城市的名称。 Seems simple enough, yet when I run this code (I had to use CTEs), I get only the number of orders, no city name. 看起来很简单,但是当我运行此代码(必须使用CTE)时,我只会得到订单数量,而没有城市名称。

WITH CityOrder AS
(
    SELECT City 
    FROM Person.Address JOIN Sales.SalesOrderHeader 
        ON ShipToAddressID = AddressID
), 
CitiesOrders AS
(
    SELECT City, COUNT(City) AS "NoOfOrders"
    FROM CityOrder
    GROUP BY City
)
SELECT MAX("NoOfOrders") FROM CitiesOrders;

I tried to change last line to 我试图将最后一行更改为

SELECT City, MAX("NoOfOrders") FROM CitiesOrders;

But then, it shows all the cities with their orders. 但随后,它将显示所有城市及其订单。 I'm pretty sure I'm not seeing some simple mistake. 我敢肯定我没有看到一些简单的错误。 Any advice? 有什么建议吗?

Order your results and take top 1 but with ties in case several cities have same number of orders: 订购结果并获得前1名,但如果几个城市的订单数相同,则并列并列:

...
SELECT TOP 1 WITH TIES * 
FROM CitiesOrders
ORDER BY NoOfOrders DESC

Try this! 尝试这个!

select top 1 * from
(
SELECT City,count(1) as x 
    FROM Person.Address JOIN Sales.SalesOrderHeader 
        ON ShipToAddressID = AddressID
group by City
) order by x desc
WITH CityOrder AS
(
SELECT City 
    FROM Person.Address JOIN Sales.SalesOrderHeader 
    ON ShipToAddressID = AddressID
),  
CitiesOrders AS
(
SELECT City, COUNT(City) AS "NoOfOrders"
    FROM CityOrder
   GROUP BY City
)
SELECT * from CitiesOrders order by "NoOfOrders" desc limit 1;

you write perfect query but a little bit is missing there. 您编写了完美的查询,但是那里缺少一点。 You can use your query with Group by . 您可以对Group by使用查询。

SELECT City, MAX("NoOfOrders") FROM CitiesOrders group by City

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM