Вопрос

Предположим, у меня есть таблица с именем элементов:

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, goods_id в поручении по убыванию цены на items Таблица, такая, как строка не появляется более одного раза, которая содержит одно и то же значение sender_id (Здесь sender_id 2).Я использовал следующий запрос, но был напрасно:

select distinct sender_id,goods_id from items where receiver_id=1 order by price desc
.

Результат показывает все пять кортежей (записей) с кортежами, содержащими Sender_ID 2 трижды в порядок убывания времени. Но то, что я хочу, это отображать только три записи, которые один из них имея Sender_ID 2 с только самой высокой ценой 5000. Что мне делать? Мой ожидаемый выход:

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