一、数据表设计

二、查询场景

统计每门课的考试次数、最新一次考试的时间、最新一次考试的录入成绩的老师

1、统计没门课的考试次数

#考试次数统计
select project '科目',count(project) '考试次数' from score a group by project

查询结果:

2、最新一次考试的时间

#考试次数统计  最新一次考试的时间
select project '科目',count(project) '考试次数' ,max(create_time) from score a group by project

查询结果:

3、分组统计最新的录入成绩的老师

当我们分组去查询最新的录入成绩的老师或者分组查询最新一次各科的成绩时确发现数据不是最新的。

SELECTa.id,a.edit_teacher,a.project,a.create_time,a.score, count(project) '考试次数',max(create_time) '最新数据时间'
FROMscore a
GROUP BYa.project

查询结果:

但是很显然我们需要查询的数据id应该是4、8、12

可以看出分组聚合的时候默认查询的是分组之后的第一条数据,那么我们想要查询最新的数据需要新对我们的数据进行排序

SELECT*,count( project ) '考试次数',max(create_time) '最新数据时间'
FROM(
SELECTa.id,a.edit_teacher,a.project,a.create_time,a.score
FROMscore a
ORDER BYa.id DESC ) b
GROUP BYb.project

查询结果:

我们发现数据并不是我们想要的结果,子查询里面的排序失效了

网上查找各种资料发现

子查询生成的临时表(派生表derived table)中使用order by且使其生效,必须满足三个条件:

1、外部查询禁止分组或者聚合

2、外部查询未指定having,HAVING, order by

3、外部查询将派生表或者视图作为from句中唯一指定源

显然我们没有满足,那么如何解决order by失效呢?

我们外部表使用了group by,那么临时表将不会执行filesort操作(即order by会被忽略),所以我们可以在临时表中加上(distinct(a.id))。

SELECT*,count( project ) '考试次数' ,max(create_time) '最新数据时间'
FROM(
SELECT DISTINCTa.id,a.edit_teacher,a.project,a.create_time,a.score
FROMscore a
ORDER BYa.id DESC ) b
GROUP BYb.project

执行结果:

结果正确。

mysql 分组之后 取分组之后最新的数据相关推荐

  1. 分组后取每组最新的数据

    select * from members m where m.id in (select SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY age desc),',' ...

  2. oracle 取分组第一行,oracle分组后取每组第一条数据

    oracle 分组后取每组第一条数据 '数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER ...

  3. Mysql查询最后一条(最新)数据

    Mysql查询最后一条(最新添加)的数据 查询最后一条(最新添加)的数据 做法 表中没有ID自增字段时 表中有ID自增字段时 相关知识点 参考链接 查询最后一条(最新添加)的数据 目的:项目中需要我查 ...

  4. Mysql 5.7 取分组第一条

    以下表为例,需要取每个班级.被选的次数最多的学科,比如1班的有三个选数学的,一个选语文的,那么期望返回的是数学,其他同理. id name class course 1 张三 1 数学 2 李四 1 ...

  5. 【MYSQL】分组之后获取每组最新的数据

    记录一次有点麻烦的sql 可以直接复制拿去测试,一开始我也百度来着,发现要么没法满足我的需求,要么就连看下去的欲望都没有 建表测试demo: CREATE TABLE `p_test` (`id` v ...

  6. oracle 分组后取每组第一条数据

    数据格式 分组取第一条的效果 sql SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY x ORDER BY y DESC) rn, test1 ...

  7. PG数据库:分组后取每组第一条数据

    PG数据库查询遇到一个需求,数据库表data,先对其中设备标识字段a分组group by,然后查一段时间内的每一个设备数据字段b的极大值和极大值发生的数据时间time,想起之前Oracle有类似写法, ...

  8. mysql 一对多 关联一条最新的数据_不得不会的mysql锁

    6. 多表之间的关系 如图,实际业务数据库中的表之间都是有关系的,我们接下来主要要学习的就是如何分析表关系及建立表关系. 分类表 create table category( cid varchar( ...

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

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

最新文章

  1. HttpWebRequest.GetResponse() raises exception when http status code 400 (bad request) is returned
  2. C语言指针与函数传参
  3. 收集的48个Shell脚本小技巧
  4. Asterisk标准通道变量
  5. 6月全球Web服务器市场份额:Apache升至64.33%
  6. SpringBoot 注解 @Configuration @PropertySource @Value
  7. 查找子串在母串中的位置、编写一个函数实现字符串拼接【数据结构实验报告算法详解】
  8. 利用Geotools来转换影像的坐标系[转]
  9. 二十一天学通Java:调用对象为null值的引用
  10. python基本执行方式_Python开发的3种命令执行方法
  11. 第十二章 trie路由--基于Linux3.10
  12. C# 解密微信步数 报错“填充无效,无法被移除。”
  13. remote collaboration on physical tasks 应用
  14. 最后7天!阿里云2020云内存数据库峰会现场参会报名中
  15. c#调用java的webservice方法,C# 调用 Java WebService | 思考的极致
  16. 计算机等级考试教学论文,计算机等级考试课程教学论文
  17. OCR技术发展综述与达观数据的实践经验
  18. 开源算法六轴机械臂_我从星期六早上的漫画中学到的开源知识
  19. UI设计中的“吐司”是什么意思?
  20. 暴风播酷云J3455局域网smb传输不稳定的另一种解决方案

热门文章

  1. python分块处理功能_Python自然语言处理学习笔记之信息提取步骤分块(chunking)...
  2. php市场占比 2019,2019年家电市场份额占比排名
  3. 这几个习惯,让我成为了高阶网络工程师。
  4. python入门(三)--文件处理
  5. 四象限法推导lm曲线_SEM数据分析四象限方法
  6. LeetCode——字节跳动系列题目
  7. 关于sd卡的读取权限
  8. Linux新手入门之基础命令操作
  9. Kotlin关键字总结
  10. 7z001怎么解压在安卓手机上面_安卓手机来电闪光灯怎么设置