2015-12-22 10 views
0

То, что я пытаюсь сделать, это получить название города с наибольшим количеством заказов. Кажется довольно простым, но когда я запускаю этот код (мне приходилось использовать CTE), я получаю только количество заказов, никакого имени города.SQL Select with 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; 

Я попытался изменить последнюю строку

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

Но тогда, это показывает все города с их заказами. Я почти уверен, что не вижу простой ошибки. Любой совет?

+1

Это показывает, что вы также выбрали город. Вы говорите, что хотите, чтобы все города и их Макс. Вам необходимо заказать COUNT в вашем CitiesOrders и выбрать TOP 1, тогда вам не нужен третий запрос. Хотя все это можно было бы обрабатывать и в одном запросе. –

+0

Да, я знаю, что последнее неверно, я просто показывал, что я имел в виду, не написал весь код с помощью GROUP BY. Ожидаемый результат - получить ОДИН город, который имеет большинство заказов. – Jake

+0

Каков ожидаемый результат, если два города имеют одинаковое максимальное значение? – jarlh

ответ

1

Заказать ваши результаты и принять топ-1, но с связи в случае, если несколько городов имеют одинаковое количество заказов:

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

Попробуйте это!

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 
0
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; 
+0

Ответ продукта, для которого продукт? (Нет dbms, о которых идет речь ...) – jarlh

+0

это postgresql –

+1

Слишком плохой op использует SQL Server. – jarlh

0

вы пишете идеальный запрос, но немного не хватает там. Вы можете использовать свой запрос с Group by.

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