기본 키를 포함하여 열의 SQL 최대
-
03-07-2019 - |
문제
짧은:
아래 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를 제공하는 상단 행만 잡으십시오.
제휴하지 않습니다 StackOverflow