Mysql 使用 group by 和 having 子句查询
Mysql query with group by and having clause
我正在构建查询以获取同一产品的最高价格。
我有 table 作为
-----------------------------------------
| 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);
谁能指导我获得所需结果的查询。
这是一个使用连接的选项:
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)
对于SQL服务器
;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
SELECT *
FROM user_bid
WHERE (prodid, price) IN
(
SELECT prodid, MAX(price)
FROM user_bid
GROUP BY prod_id
)
使用以下查询:
SELECT * FROM (SELECT * FROM user_bid ORDER BY price DESC) AS Temp
GROUP BY prod_id
输出:
我正在构建查询以获取同一产品的最高价格。 我有 table 作为
-----------------------------------------
| 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);
谁能指导我获得所需结果的查询。
这是一个使用连接的选项:
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)
对于SQL服务器
;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
SELECT *
FROM user_bid
WHERE (prodid, price) IN
(
SELECT prodid, MAX(price)
FROM user_bid
GROUP BY prod_id
)
使用以下查询:
SELECT * FROM (SELECT * FROM user_bid ORDER BY price DESC) AS Temp
GROUP BY prod_id
输出: