#sql #group-by #max
#sql #группа-по #максимум
Вопрос:
Запрос:
SELECT itemcode, whsecode, MAX(quantity) FROM inventoryTable WHERE itemcode = 'FG 4751' GROUP BY itemcode;
Он возвращает эту ошибку:
Колонка «Таблица инвентаризации».whsecode’ недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.
Когда я помещаю whsecode в предложение GROUP BY, оно просто возвращает все или несколько строк с кодом элемента 'FG 4751'
:
Вывод, который мне нужен, это
FG 4751|WHSE3|100
Ответ №1:
SELECT TOP 1 * FROM inventoryTable WHERE itemcode = 'FG 4751' ORDER BY quantity DESC
Комментарии:
1. Он возвращает ошибку агрегатной функции, но мне просто нужно удалить функцию MAX (), и она отлично работает, спасибо.
Ответ №2:
Ричард —
Не уверен, что в какой-то момент планируется использовать это для нескольких кодов элементов. Это может быть достигнуто с помощью оконной функции —
WITH HIGH_RANK AS( SELECT itemcode, whsecode, quantity, RANK(quantity) OVER (PARTITION BY itemcode ORDER BY quantity DESC) AS MAX_RANK FROM inventoryTable) SELECT itemcode, whsecode, quantity FROM HIGH_RANK WHERE MAX_RANK = 1
-РАНЖИРОВАТЬ(количество) ПО (РАЗДЕЛЕНИЮ ПО КОДУ товара, ПОРЯДКУ ПО количеству) КАК MAX_RANK
Использование ранга приведет к тому, что во всех случаях, когда количество равно максимальному, если вам нужно только одно значение, поменяйте РАНГ на ROW_NUMBER
Ответ №3:
SELECT * FROM inventoryTable WHERE itemcode = 'FG 4751' ORDER BY MAX(quantity) DESC LIMIT 1