Mysql分组取每组排序后第一个
Mysql
- 1. 需求:分组查询,每个分组中第一条记录
- 1.1 方案1
- 1.2 方案2
- 1.3 方案3
- 1.4 方案4
- 2. 踩坑之路
1. 需求:分组查询,每个分组中第一条记录
1.1 方案1
使用 ANY_VALUE
函数,返回该分组中的第一个
tips: Mysql5.7及之后的版本, 因为默认sql_mode=“ONLY_FULL_GROUP_BY”不能直接返回group by 中不包含的字段
select ANY_VALUE(name), class_id from (select distinct *from students where school_id = 1order by age desc) as filter_studentsgroup by filter_students.class_idorder by filter_students.age
1.2 方案2
使用GROUP_CONCAT
拼接所有数据,再用SUBSTRING_INDEX
裁剪指定的段数
SELECTSUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY `date` DESC),',',1)
FROM`test`
GROUP BYcategory_id
1.3 方案3
使用Mysql中用户自定义变量,实现类似开窗函数的作用;其中用到自定义变量
参考链接
参考链接
select * from (selectcase when @dept_no_t != x.dept_no then @row_num_t := 1else @row_num_t := @row_num_t + 1end as sort_result,x.id,x.emp_name,-- x.dept_no,@dept_no_t := x.dept_no as dept_no,x.emp_salary,x.emp_hire_datefrom emp as x,(select @dept_no_t := '') as t1,(select @row_num_t := 0) as t2order by dept_no,emp_salary desc
) as y
where y.sort_result = 1;
1.4 方案4
使用开窗函数
参考链接
相关知识链接
2. 踩坑之路
- group by中的子查询,子查询中的order by 会失效。因为mysql优化器的作用。可以再子查询中使用,limit 或 distinc 关键字来避免对应排序的失效
- mysql中自定义变量有很多坑。例如,会因为优化器的原因不执行,因sql语句每部分执行,会有先后顺序而影响【‘from’ ‘join on’ ‘where’ ‘group by’ ‘having’ ‘distinct’ ‘order by’ ‘limit’ ‘select’】
Mysql分组取每组排序后第一个相关推荐
- mysql 排序取前4,mysql分组取每组前几条记录(排序)
首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...
- mysql分组取每组前几条记录(排序)
首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...
- mysql单列去重复group by分组取每组前几条记录加order by排序
<div class="post"><h1 class="postTitle"><a id="cb_post_title ...
- mysql分组取出每组地一条数据_MYSQL实现分组排序并取组内第一条数据
一.需要实现分组排序并且取组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据 第一种写法: select t.* from ( sel ...
- mysql分组取出每组地一条数据_基于mysql实现group by取各分组最新一条数据
基于mysql实现group by取各分组最新一条数据 前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式. 一.准 ...
- Mysql分组查询每组最新的一条数据(三种实现方法)
MySQL分组查询每组最新的一条数据 前言 注意事项 准备SQL 错误查询 错误原因 方法一 方法二(适用于自增ID和创建时间排序一致) 方法三(适用于自增ID和创建时间排序一致) 总结 MAX()函 ...
- 【编程技巧】Stream流之list转map、分组取每组第一条
编程技巧-Stream流之list转map.分组取每组第一条 目录 编程技巧-Stream流之list转map.分组取每组第一条 前言 一.list转map 二.分组取每组第一条数据 总结 前言 JD ...
- mysql分组取所有数据_mysql 分组后取每个组内最新的一条数据
首先,将按条件查询并排序的结果查询出来. mysql> select accepttime,user,job from tuser_job where user =8 order by acce ...
- mysql分组取最新时间的数据
mysql分组后显示最新数据 方法一:NOT EXISTS SELECT e.GROUP_COLUMN, e.COMPARE_TIME FROM ...
最新文章
- silverlight 客户端之间的通讯
- ajax静态页面实例,AJAX实例:Ajax实现静态页面分页
- 21世纪初最有影响力的20篇计算机视觉期刊论文
- Visual Studio——多字节编码与Unicode码
- [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
- flink sql是否支持emit策略
- CF1271D Portals
- LeetCode 81 搜索旋转排序数组 II
- 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc
- iOS 数据库操作(使用FMDB)
- 流畅的python和cookbook学习笔记(五)
- mysql like 多个条件_MySQL之用通配符进行过滤
- 【Java】P1957 口算练习题—(洛谷OJ)
- navicat运行db文件_navicat导入db文件_db文件转换为txt
- RV-LINK:用RISC-V开发板做RISC-V仿真器
- zerotier异地搭建组网
- html实现密码手机找回,找回密码.html
- 《嵌入式应用开发》实验一、开发环境搭建与布局
- c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)
- Ubuntu-拼音输入法安装
热门文章
- 怎么用快影去除视频中的水印?
- httpd模块支持https请求模块mod_ssl
- git Cherry-pick Failed your local changes would be overwritten by cherry-pick. hint: commit your
- 常识:大白话讲解「对账」
- 在 Linux 中追加到内容的末尾
- 使用GRUB2制作多重系统引导程序
- Libgdx之正交相机 OrthographicCamera
- python简笔画程序_只用C++和Python,让你的简笔画实时动起来!
- word利用mathtype进行公式分章节编号和引用
- Java中violate关键字详解