2014-01-09 23 views
4

想,我有一個表的命名項:從列選擇在MySQL不同的價值

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表等沒有多行出現多次,其中包含相同的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 
+0

可以張貼上表中預期的輸出? –

+0

我已經編輯了我的問題@ ling.s – rosemary

+0

爲什麼你會以receiver_id的價格獲得價格? –

回答

0

請儘量將

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 
+0

我不明白1中的使用(從項目中選擇1)。你能給我一些提示嗎? @tin tran – rosemary

+0

你可以在那裏選擇任何東西。因爲存在檢查select是否返回任何行。 Not Exists確保在子查詢中沒有與id相同且價格較高的行。您可以選擇1或選擇2或選擇0或選擇任何您喜歡的sender_id。因此,查詢基本上是說不存在一行(具有相同的ID和更高的價格)。 –

+0

以及... @tin tran我們也可以使用*而不是1或0或2 ..?但那麼它只是一個開銷,對吧? – rosemary

2

獲得各組的最高價,你可以做象下面這樣:

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 
+0

感謝@xdazz我的投票贊成這個 – rosemary

0
select distinct (sender_id,goods_id) from items where receiver_id=1 order by price desc; 

你可以使用這個樣子。

1

試試這個:

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 

OR

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 
+0

第二部分是給出的輸出,但第一部分給出了一個錯誤,感謝我的投票! – rosemary

+0

@rosemary歡迎您...檢查更新後的答案。現在這兩個查詢將工作。在MAX(價格)AS maxPrice之後,我添加了'comma',這是一個錯字錯誤。我糾正了它。我更喜歡使用第一種方法 –

+0

謝謝!它被糾正了,但第一部分沒有給出預期的輸出。無論如何,哪種方法在速度上更好? @Saharsh Shah – rosemary