MySQL의 열에서 고유 한 값을 선택합니다
-
21-12-2019 - |
문제
항목이라는 테이블이 있습니다.
sender_id receiver_id goods_id price
2 1 a1 1000
3 1 b2 2000
2 1 c1 5000
4 1 d1 700
2 1 b1 500
.
여기에서 항목 테이블에서 항목 테이블에서 가격 순서를 내림차순으로 선택하고 동일한 sender_id 값을 포함하는 행이없는 것으로 나타나지 않도록 선택하십시오 (여기 sender_id 2).나는 다음 쿼리를 사용했지만 vain :
select distinct sender_id,goods_id from items where receiver_id=1 order by price desc
.
결과는 TIME의 내림차순으로 sender_id 2 3 번을 포함하는 튜플이있는 모든 5 개의 튜플 (레코드)을 보여줍니다.하지만 내가 원하는 것은 5000의 가장 높은 가격으로 sender_id를 가진 3 개의 레코드를 표시하는 것 중 하나만 표시하는 것입니다.. 어떻게해야합니까? 예상 출력은 다음과 같습니다.
sender_id goods_id
2 c1
3 b2
4 d1
. 해결책
이 작업을 시도하십시오
select sender_id,goods_id from items t1
where not exists (select 1 from items t2
where t2.sender_id = t1.sender_id
and t2.receiver_id = t1.receiver_id
and t2.price > t1.price)
and receiver_id = 1
order by price desc
. 다른 팁
각 그룹의 가장 높은 가격을 얻으려면 아래와 같이 할 수 있습니다 :
SELECT T1.*
FROM (
SELECT
MAX(price) AS max_price,
sender_id
FROM items
GROUP BY sender_id
) AS T2
INNER JOIN items T1 ON T1.sender_id = T2.sender_id AND T1.price = T2.max_price
WHERE T1.receiver_id=1
ORDER BY T1.price
. 시도 :
SELECT i.sender_id, i.goods_id
FROM items i
INNER JOIN (SELECT i.sender_id, MAX(i.price) AS maxPrice
FROM items i WHERE i.receiver_id=1
GROUP BY i.sender_id
) AS A ON i.sender_id = A.sender_id AND i.price = A.maxPrice
WHERE i.receiver_id=1
.
또는
SELECT i.sender_id, i.goods_id
FROM (SELECT i.sender_id, i.goods_id
FROM (SELECT i.sender_id, i.goods_id
FROM items i WHERE i.receiver_id=1
ORDER BY i.sender_id, i.price DESC
) AS i
GROUP BY i.sender_id
) AS i
. select distinct (sender_id,goods_id) from items where receiver_id=1 order by price desc;
.
이렇게 사용할 수 있습니다.
제휴하지 않습니다 StackOverflow