SQL, выбирающий максимальное значение со всеми столбцами

#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