Вопрос

Короткий:

Из приведенного ниже sql select я получаю cart_id и значение максимально ценного товара в этой корзине.

SELECT CartItems.cart_id, MAX(ItemValues.value)
FROM CartItems 
INNER JOIN ItemValues 
ON CartItems.item_id=ItemValues.item_id
GROUP BY CartItems.cart_id

но мне также нужен item_id для этого элемента (ItemValues.item-id).

Длинный:

Две таблицы, cartItems, ItemValues (и их соответствующие корзины, Items, здесь неуместны).
В каждой корзине может быть несколько товаров, где каждый товар имеет одно значение, определенное в ItemValues.
Каждый товар принадлежит к одной корзине.
Стоимость корзины - это стоимость товара с максимальной стоимостью в корзине.
Как мне выбрать cart-id, max (значение товара) и соответствующий идентификатор товара?

Например, идентификатор корзины A содержит идентификатор товара X со значением 10 и идентификатор товара Y со значением 90.
С помощью приведенного выше sql select я получаю,

A, 90
Что мне нужно, так это

A, Y, 90


Платформа:MS SQL

Это было полезно?

Решение

В MS SQL и Oracle:

SELECT *
FROM
  (
  SELECT ci.*, iv.*, 
        ROW_NUMBER() OVER (PARTITION BY CartItems.cart_id ORDER BY ItemValues.value DESC)
  FROM   CartItems ci
  INNER JOIN ItemValues iv
     ON CartItems.item_id=ItemValues.item_id
  ) s
WHERE rn = 1

В MySQL:

SELECT
FROM
  (
  SELECT ci.*,
         (
         SELECT id
         FROM ItemValues iv
         WHERE iv.item_id = ci.item_id
         ORDER BY
               value DESC
         LIMIT 1
         ) AS maxitem
  FROM   CartItems ci
  ) iv, ItemValues ivo
WHERE ivo.id = iv.maxitem

Другие советы

Этот код был написан для Oracle, но должен быть совместим с большинством версий SQL:

Это возвращает значение max (high_val) и его ключ.

select high_val, my_key
from (select high_val, my_key
      from mytable
      where something = 'avalue'
      order by high_val desc)
where rownum <= 1

Что здесь говорится, так это:Отсортируйте mytable по high_val по убыванию значений, где something = 'avalue'.Берите только верхнюю строку, которая предоставит вам максимальное значение (high_val) в выбранном диапазоне и my_key для этой таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top