문제

짧은:

아래 SQL Select에서 나는 CART_ID와 해당 CART의 최대 가치 항목의 값을 얻습니다.

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).

긴:

두 개의 테이블, 카트티 템, 항목 볼루 (및 해당 카트, 항목, 여기에 관련이 없습니다).
각 카트는 각 항목에 itemValues로 정의 된 하나의 값이있는 여러 항목을 가질 수 있습니다.
각 항목은 하나의 카트에 속합니다.
카트의 값은 카트 내에서 최대 값을 가진 항목의 값입니다.
CART-ID, MAX (ITEM-VALUE)를 어떻게 선택하고 해당 항목 ID입니까?

예를 들어 CART-ID A에는 값 10이있는 항목 -ID X가 있고 값 90의 항목 ID y가 포함됩니다.
위의 SQL Select를 사용하면 I Get을 사용하고

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

이것이 말하는 것은 다음과 같습니다. 선택한 범위에서 MAX (High_Val)를 제공하고 해당 테이블의 My_key를 제공하는 상단 행만 잡으십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top