[英]sql group by two column with min condition
我有一張桌子,
| ID |ID2 | price|
+----+---+----+
| A | AA | 7 |
| B | AA | 3 |
| C | AA | 4 |
| D | BB | 7 |
| I | BB | 2 |
| F | BB | 3 |
| G | CC | 9 |
| E | CC | 4 |
| K | CC | 1 |
+----+---+---+
我需要通過ID2獲取下一個表組,其中包含最小字段價格和對應的最小價格字段ID1
| ID1 | ID2 | min_price |
+----+---+---+----------
| B | AA | 3 |
| I | BB | 2 |
| K | CC | 1 |
+----+---+---+---------
select a.id, a.id2, a.price from #yourtable a
join
(
select id2, min(price) AS price
from #yourtable
group by id2
)b
on a.id2=b.id2 and a.price=b.price
SELECT *
FROM
#table t
INNER JOIN (
SELECT
ID2
,MIN(price) as min_price
FROM
#table
GROUP BY
ID2
) g
ON t.ID2 = g.ID2
AND t.price = g.min_price
第1步找到最低價格,第2步返回以獲取匹配的原始記錄以獲取ID。 還有其他方法可以做到這一點。
請注意,如果您的數據集包含相同ID2中具有相同價格的2條記錄,那么將始終返回多於1條記錄。
根據您的解釋,我們需要按id2分組,並獲得最低價格及其對應的id。 這是相同的查詢
SELECT id,
id2,
price
FROM NEXT
WHERE (price,id2) IN
(SELECT MIN(price), id2 FROM NEXT GROUP BY id2
);
http://sqlfiddle.com/#!9/295702/2
SELECT t1.*
FROM t1
LEFT JOIN t1 t2
ON t1.id2=t2.id2
AND t1.price>t2.price
WHERE t2.ID IS NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.