比如有表A
ID name
1 x
2 y
3 z
表B
ID rank
1 10
1 15
1 30
2 28
2 12
3 24
3 22
我想连接查询对应ID的rank,但是只要最大的rank值
ID name rank
1 x 30
2 y 28
3 z 24
sql如何写?
select b.ID,a.name,max(b.rank) from A a,B b where a.ID=b.ID group by a.ID
如果是oracle数据库,可以使用窗口函数。
select a.name,max(b.rank) from A a,B b where a.ID=b.ID group by a.ID
SELECT a.ID,a.name, b.rank
FROM name a
LEFT JOIN
(SELECT max(b.rank),
b.ID
FROM rank b
group by b.ID) t
0N t.ID = a.ID
试一下这个语句。
SELECT * FROM A aa
INNER JOIN (SELECT id,MAX(Rank) FROM B GROUP BY id) bb ON aa.id=bb.id
一般这样就可以 :
select a.id,a.name,max(b.rank) rank from A a,B b where a.ID=b.ID group by a.ID,a.name
如果希望出现所有的ID,哪怕rank最大值为空也出现的写法 :
select a.id,a.name,max(b.rank) rank from A a left join B b on a.ID=b.ID group by a.ID,a.name