2015-06-16 2 views
1

Есть ли лучший способ сделать следующее:MySQL - Одинаковые ID Максу графа («нужно» более элегантное решение)

SELECT ProductID, MAX(a.countProductID) 
FROM 
    (
    SELECT ProductID, COUNT(ProductID) as countProductID 
    FROM SalesOrderDetail 
      LEFT JOIN Product USING (ProductID) 
    GROUP BY ProductID 
    ) as a 
WHERE a.countProductID = (SELECT MAX(x.countProductID) FROM 
          (
           SELECT ProductID, COUNT(ProductID) as countProductID 
           FROM SalesOrderDetail 
             LEFT JOIN Product USING (ProductID) 
           GROUP BY ProductID 
          ) as x 
          ); 

Так им, используя тот же подзапрос дважды. Однако я не могу получить доступ к первому из предложения WHERE.

+0

я имею в виду, вы можете использовать вид? – Adam

+0

Его осуществление для класса. (Однако был только вопрос: мой предоставленный код полностью у меня, и я не хочу, чтобы вы закончили домашнюю работу) Отнюдь не то, что мой профессор хочет, чтобы я использовал. Однако я проспал некоторые классы и понятия не имею, что это такое: $ Не могли бы вы указать мне ресурс, чтобы узнать его? – JohnRW

+0

Так что же вы хотите? – Adam

ответ

0

Окончательный ответ

SELECT ProductID, COUNT(ProductID) as countProductID 
FROM SalesOrderDetail 
LEFT JOIN Product USING (ProductID) 
GROUP BY ProductID 
ORDER BY countProductID desc 
LIMIT 1 
+0

Он хочет топ-1 с галстуками, как в 'sql server' –

+0

@GiorgiNakeuri Я просто понял, что собирается внести некоторые изменения ... – bowlturner

+1

@GiorgiNakeuri ... Что даст вам эту идею? Его запрос возвращает одну строку с неопределенным продуктом. версия этого запроса была тонкой интерпретацией вопроса. –

1

Я предполагаю, что задача состоит в том, чтобы найти продукт или продукты с максимальным числом продаж. Сначала вы не должны присоединиться к таблице PRODUCT, потому что вся необходимая информация находится в таблице SalesOrderDetail. Затем с помощью LIMIT 1 найти максимальное количество и HAVING выбрать все продукты с максимальным числом:

SELECT ProductID, COUNT(ProductID) as countProductID 
FROM SalesOrderDetail 
GROUP BY ProductID 
HAVING COUNT(ProductID) = (SELECT COUNT(ProductID) as countProductID 
          FROM SalesOrderDetail 
          GROUP BY ProductID 
          ORDER BY countProductID DESC 
          LIMIT 1) 
+0

Это тоже работает. Благодарю. Он даже возвращает и верхние счетные продукты, что было бы еще более правильным. Однако мой профессор попросил только одного ... У вас тоже есть верх, потому что ваш ответ умнее, чем вопрос моих профессоров, D – JohnRW