簡體   English   中英

sql用最小條件的兩列分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM