SQL组由id

时间:2011-01-03 21:28:06

标签: sql

如果我有像

这样的结果集
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);

4 个答案:

答案 0 :(得分:9)

select max(id1), id2
from table
group by id2

我假设你想要最大值。关键是你要对id2列进行分组,并在id1上执行某种聚合函数(min,max,sum,avg)

答案 1 :(得分:4)

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

这给出了您用作示例的结果集 - 每个ID2的最低ID1。您可以使用其他函数代替MIN来获取ID2值的其他有趣值,确切的函数列表因数据库产品而异。

答案 2 :(得分:0)

不确定它是否是一种智能方式,但您可以嵌套查询类似

的查询
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

答案 3 :(得分:0)

在ID1列上使用group by然后使用聚合函数

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

这将为您提供与ID2相关的最高ID1值