Mysql先排序后分组简单方法

Mysql先排序后分组简单方法

mysql常见的排序分组是使用子查询先排序再分组,我们来用另外一种方式实现简单的分组排序

  1. 创建测试数据表
CREATE TABLE `user` (
  `u_id` int(11) NOT NULL AUTO_INCREMENT,
  `u_name` varchar(50) NOT NULL,
  `u_age` tinyint(3) unsigned NOT NULL,
  `u_gender` char(1) NOT NULL,
  `u_add_time` int(11) DEFAULT NULL,
  PRIMARY KEY (`u_id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COMMENT='用户';
  1. 生成测试数据
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('张三','18','男',UNIX_TIMESTAMP(NOW()));
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('马七','16','男',UNIX_TIMESTAMP(NOW()));
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('李四','18','女',UNIX_TIMESTAMP(NOW()));
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('王六','17','女',UNIX_TIMESTAMP(NOW()));
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('刘五','17','男',UNIX_TIMESTAMP(NOW()));
   insert into `user`(u_name,u_age,u_gender,u_add_time) VALUES('周十','16','女',UNIX_TIMESTAMP(NOW()));
  1. 需求: 查询出不同性别中的年龄最大的名字
    方法一:
select SUBSTRING_INDEX(GROUP_CONCAT(u_name order by u_age desc),',',1) as username from `user` group  by u_gender

方法二
要求:mysql版本>=8.0

select u_name,sorts from (select  u_name,dense_rank() over(partition by u_gender order by u_age desc) as sorts from `user`) as m where sorts = 1
  1. 查询结果
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201209200338400.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lvbG9fbWU=,size_16,color_FFFFFF

注意:
函数SUBSTRING_INDEX(str, delimiter, count) 返回一个 str 的子字符串,在 delimiter 出现 count 次的位置截取。 如果 count > 0,从则左边数起,且返回位置前的子串; 如果 count < 0,从则右边数起,且返回位置后的子串。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值