今天在做项目的时候,碰到了一个sql查询需求,具体情况如下:
假设有一张表table,如下所示:
id | price | name | ... |
1 | 9 | jack | ... |
1 | 3 | tom | ... |
2 | 8 | tim | ... |
1 | 10 | simo | .. |
2 | 7 | scott | ... |
现在的需求是取出每种id,price最大的一行,比如上表加红的两行:
如果表中只有id和price两列,那么可以用如下语句:(主要是group by的用法)
select id, max(price) from table where... group by id;
但是如果如上面的table表,还要显示name等信息,那么肯定不能用上面这么简单的语句了,解决方法如下(inner join):
select * from table t1 inner join (select id, max(price) price from table group by id) t2 on t1.id = t2.id and t1.price = t2.price
perfect!