2016-10-07 17 views
1

我正在構建查詢以獲得同一產品的最高價格。 我有表作爲Mysql查詢與分組並具有子句

----------------------------------------- 
| prod_id | price | user_id | 
----------------------------------------- 
|  4  | 25  |  1  | 
|  4  | 38  |  2  | 
|  4  | 41  |  3  | 
|  7  | 100  |  1  | 
|  7  | 95  |  2  | 
----------------------------------------- 

我試圖讓下面的輸出:

----------------------------------------- 
|  4  | 41  |  3  | 
----------------------------------------- 
|  7  | 100  |  1  | 
----------------------------------------- 

我構建以下查詢這是不正確的。

select * from user_bid group by prod_id having max(price); 

有人可以指導我查詢所需的結果。

+0

你使用MySQL或MS SQL Server?不要標記不涉及的產品,你已經得到的答案只適用於那些。 – jarlh

+0

@jarih:在一個項目中可以使用多個數據庫引擎。 (雖然在這種情況下可能沒有,因爲問題只提到mysql) – Kris

+0

@Kris,我知道,但很少見。由於超過99%的帖子有多個dbms標籤,我用它來做錯誤的。 – jarlh

回答

3
SELECT * 
FROM user_bid 
WHERE (prodid, price) IN 
(
    SELECT prodid, MAX(price) 
    FROM user_bid 
    GROUP BY prod_id 
) 
+0

MySQL支持行和表構造函數嗎? – jarlh

+0

我不知道,但這將工作 –

+1

它的工作,非常感謝 –

3

下面是使用一個選項加入:

SELECT p1.* 
FROM prod_id 
INNER JOIN 
(
    SELECT prod_id, MAX(price) AS price -- this inner subquery finds the maximum 
    FROM user_bid       -- price for each product group 
    GROUP BY prod_id 
) p2 
    ON p1.prod_id = p2.prod_id AND   -- and this join condition retains 
     p1.price = p2.price    -- only records which have this maximum 
              -- price for each product group 

在此可以使用子查詢的選項:

SELECT p1.* 
FROM prod_id p1 
WHERE price = (SELECT MAX(p2.price) FROM prod_id p2 WHERE p1.prod_id = p2.prod_id) 
1

對於SQL Server

;WITH cte AS 

(
SELECT prod_id,price,user_id, 
     ROW_NUMBER() OVER(PARTITION BY prod_id ORDER BY price desc) as rank 
FROM table Name 
) 

SELECT prod_id,price,user_id 
FROM cte 
WHERE rank=1 
+0

太糟糕OP正在使用MySQL ...不太公平。 – jarlh

+0

他已經標記了sql server ..現在刪除 –

+0

我知道,這就是爲什麼我說這是不公平的。 – jarlh

0

使用以下查詢:

SELECT * FROM (SELECT * FROM user_bid ORDER BY price DESC) AS Temp 
GROUP BY prod_id 

輸出:

Image

+0

我建議你創建表和插入數據指定,然後嘗試您的查詢。 – jarlh

+1

是的,我做到了,工作正常。我將添加輸出。 –

+1

迷人!我能說什麼?只有MySQL ... – jarlh