mysql分组之后得到各组排序后的第一条数据

版权声明:本人原创,转载需说明文章出处     https://blog.csdn.net/persistencegoing/article/details/88817710

https://blog.csdn.net/persistencegoing/article/details/84376427

一、按name分组,val排序(这里是最大值),取第一条数据

--方法1:

select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name


--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)


--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name


--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name


--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
 

如果max()或者min()中的字段是varchar,则转相应格式,不然有坑

比如 

max(CAST(val AS SIGNED))

字符集转换 :   CONVERT(xxx  USING   gb2312)
类型转换和SQL Server一样,就是类型参数有点点不同  : CAST(xxx  AS   类型)  ,   CONVERT(xxx,类型),类型必须用下列的类型:
可用的类型:    
  二进制,同带binary前缀的效果 : BINARY    
  字符型,可带参数 : CHAR()     
  日期 : DATE     
  时间: TIME     
  日期时间型 : DATETIME     
  浮点数 : DECIMAL      
  整数 : SIGNED     
  无符号整数 : UNSIGNED

参考:http://www.cnblogs.com/mo-beifeng/archive/2012/02/07/2341886.html

希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职     

群号:721 515 304

猜你喜欢

转载自blog.csdn.net/persistencegoing/article/details/88817710