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. 踩坑之路

  1. group by中的子查询,子查询中的order by 会失效。因为mysql优化器的作用。可以再子查询中使用,limit 或 distinc 关键字来避免对应排序的失效
  2. mysql中自定义变量有很多坑。例如,会因为优化器的原因不执行,因sql语句每部分执行,会有先后顺序而影响【‘from’ ‘join on’ ‘where’ ‘group by’ ‘having’ ‘distinct’ ‘order by’ ‘limit’ ‘select’】

Mysql分组取每组排序后第一个相关推荐

  1. mysql 排序取前4,mysql分组取每组前几条记录(排序)

    首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...

  2. mysql分组取每组前几条记录(排序)

    首先来造一部分数据,表mygoods为商品表,cat_id为分类id,goods_id为商品id,status为商品当前的状态位(1:有效,0:无效). CREATE TABLE `mygoods` ...

  3. mysql单列去重复group by分组取每组前几条记录加order by排序

    <div class="post"><h1 class="postTitle"><a id="cb_post_title ...

  4. mysql分组取出每组地一条数据_MYSQL实现分组排序并取组内第一条数据

    一.需要实现分组排序并且取组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据 第一种写法: select t.* from ( sel ...

  5. mysql分组取出每组地一条数据_基于mysql实现group by取各分组最新一条数据

    基于mysql实现group by取各分组最新一条数据 前言: group by函数后取到的是分组中的第一条数据,但是我们有时候需要取出各分组的最新一条,该怎么实现呢? 本文提供两种实现方式. 一.准 ...

  6. Mysql分组查询每组最新的一条数据(三种实现方法)

    MySQL分组查询每组最新的一条数据 前言 注意事项 准备SQL 错误查询 错误原因 方法一 方法二(适用于自增ID和创建时间排序一致) 方法三(适用于自增ID和创建时间排序一致) 总结 MAX()函 ...

  7. 【编程技巧】Stream流之list转map、分组取每组第一条

    编程技巧-Stream流之list转map.分组取每组第一条 目录 编程技巧-Stream流之list转map.分组取每组第一条 前言 一.list转map 二.分组取每组第一条数据 总结 前言 JD ...

  8. mysql分组取所有数据_mysql 分组后取每个组内最新的一条数据

    首先,将按条件查询并排序的结果查询出来. mysql> select accepttime,user,job from tuser_job where user =8 order by acce ...

  9. mysql分组取最新时间的数据

    mysql分组后显示最新数据 方法一:NOT EXISTS SELECT         e.GROUP_COLUMN,         e.COMPARE_TIME     FROM        ...

最新文章

  1. silverlight 客户端之间的通讯
  2. ajax静态页面实例,AJAX实例:Ajax实现静态页面分页
  3. 21世纪初最有影响力的20篇计算机视觉期刊论文
  4. Visual Studio——多字节编码与Unicode码
  5. [python爬虫] BeautifulSoup和Selenium简单爬取知网信息测试
  6. flink sql是否支持emit策略
  7. CF1271D Portals
  8. LeetCode 81 搜索旋转排序数组 II
  9. 计算机会计和传统手工会计的区别,手工会计与计算机会计之间的区别.doc
  10. iOS 数据库操作(使用FMDB)
  11. 流畅的python和cookbook学习笔记(五)
  12. mysql like 多个条件_MySQL之用通配符进行过滤
  13. 【Java】P1957 口算练习题—(洛谷OJ)
  14. navicat运行db文件_navicat导入db文件_db文件转换为txt
  15. RV-LINK:用RISC-V开发板做RISC-V仿真器
  16. zerotier异地搭建组网
  17. html实现密码手机找回,找回密码.html
  18. 《嵌入式应用开发》实验一、开发环境搭建与布局
  19. c语言初学知识点,C语言学习关于数据类型的一些知识点(初学者)
  20. Ubuntu-拼音输入法安装

热门文章

  1. 怎么用快影去除视频中的水印?
  2. httpd模块支持https请求模块mod_ssl
  3. git Cherry-pick Failed your local changes would be overwritten by cherry-pick. hint: commit your
  4. 常识:大白话讲解「对账」
  5. 在 Linux 中追加到内容的末尾
  6. 使用GRUB2制作多重系统引导程序
  7. Libgdx之正交相机 OrthographicCamera
  8. python简笔画程序_只用C++和Python,让你的简笔画实时动起来!
  9. word利用mathtype进行公式分章节编号和引用
  10. Java中violate关键字详解