MySQLの列からの異なる値を選択します
-
21-12-2019 - |
質問
Susposs、アイテムという名前のテーブルがあります。
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
.
ここでは、 項目 テーブルから値の降順にgoods_idを選択したい( テーブル)、同じsender_id値が含まれています(ここでsender_id 2)。私は次のクエリを使用しましたが、無駄でした:
select distinct sender_id,goods_id from items where receiver_id=1 order by price desc
.
結果は、Timeの降順でSender_ID 2を含むタプルを含む5つのタプル(レコード)を表示します。私が欲しいものは、2のSender_idを持つ3つのレコードの1つだけを表示することです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;
.
このように使える。
所属していません StackOverflow