문제

항목이라는 테이블이 있습니다.

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

이렇게 사용할 수 있습니다.

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