2016-10-07 39 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