簡體   English   中英

SQL按ID分組

[英]SQL group by id

如果我有一個像這樣的結果集

ID1     ID2
43918   804
43917   804
44047   805
44046   805
44045   805
44044   805
44048   805
45172   806
44298   807
44296   808
44297   808
44294   808
44295   808
44331   809
44330   809
44334   809
44333   809
44332   809
44323   810

如何將其限制為類似

ID1     ID2
43918   804
44047   805
45172   806
44298   807
44296   808
44331   809
44323   810

基本上,每個唯一ID2一個ID1。 列來自同一表。

select ID1,ID2
from table
where ID2 in (804, 805, 806, 807, 808, 809, 810);
select max(id1), id2
from table
group by id2

我假設你想要最大。 關鍵是要對id2列進行分組,並對id1執行某種聚合函數(最小,最大,總和,平均)

 SELECT MIN(ID1), ID2 FROM Table GROUP BY ID2

這給出了您用作示例的結果集-每個ID2的最低ID1。 您可以使用其他函數代替MIN,以通過ID2值獲取其他有趣的值,具體的函數列表因數據庫產品而異。

不知道這是否是一種聰明的方法,但是您可以嵌套這樣的查詢

select 
    t1.ID2, 
    (select TOP 1 id1 from table where id2 = t1.id2 from table as t2) as ID1 
from table as t1 
where ID2 in (804,805,806,807,808,809,810);

TOP 1是特定於SQL Server的,如果您使用的是mysql / postgres,則需要選擇... LIMIT 1

使用分組依據,然后在ID1列上使用聚合函數

SELECT MAX(ID1) AS ID1, ID2
FROM TABLE
GROUP BY ID2

這將為您提供與ID2相關的最高ID1值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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