MySQL查询:Group By 后取出每一组中最大的数据

MySQL查询:Group By 后取出每一组中最大的数据
环境:MySQL5.7版本 先生成一组测试数据 public static int randAge(){ return new Random().nextI…

	MySQL查询:Group By 后取出每一组中最大的数据[数据库教程]

环境:MySQL5.7版本

先生成一组测试数据

public static int randAge(){
    return new Random().nextInt(100);
}
public static char randScore(){
    int i = new Random().nextInt(4) + 65;
    return (char)i;
}
public static String randName(){
    StringBuilder s = new StringBuilder();
    for (int i = 0; i < 3; i++){
        s.append((char) (0x4e00 + (int) (Math.random() * (0x9fa5 - 0x4e00 + 1))));
    }
    return s.toString();
}
public static void main(String[] args) {
    for(int i = 1; i <= 20; i++){
        System.out.println("INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES ("+ i +", ‘"+ randName() +"‘, "+ randAge() +", ‘"+  randScore() +"‘);");
    }
}

比如:

INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (1, ‘襠醞奪‘, 70, ‘C‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (2, ‘穟玔檠‘, 77, ‘C‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (3, ‘繜翿宽‘, 11, ‘A‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (4, ‘敕搢謝‘, 55, ‘A‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (5, ‘薰舒翎‘, 86, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (6, ‘贿怆軻‘, 31, ‘B‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (7, ‘踰齁陈‘, 26, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (8, ‘溧况癈‘, 94, ‘B‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (9, ‘捳縇睢‘, 38, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (10, ‘漲堔杙‘, 0, ‘C‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (11, ‘輪塶讣‘, 13, ‘B‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (12, ‘刪庝熽‘, 53, ‘B‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (13, ‘鄀乹聐‘, 90, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (14, ‘婈谂畛‘, 52, ‘B‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (15, ‘甔鼖苫‘, 96, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (16, ‘刘卟卅‘, 55, ‘A‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (17, ‘够負饶‘, 3, ‘D‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (18, ‘瀠禮翍‘, 14, ‘A‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (19, ‘仉余淳‘, 5, ‘C‘);
INSERT INTO `student`(`id`, `name`, `age`, `score`) VALUES (20, ‘坛唧笶‘, 59, ‘C‘);

思路

1. 先来个最简单的分组,找出每一组最大的

mysql> select score,max(age) age from student group by score;
+-------+-----+
| score | age |
+-------+-----+
| A     |  55 |
| B     |  94 |
| C     |  77 |
| D     |  96 |
+-------+-----+
4 rows in set (0.03 sec)

但是这样无法得知id和name。

2. 来个左连接查询

mysql> select a.id, a.name, a.age, a.score, b.age, b.score from student a left join (select score,max(age) age from student group by score) b on a.score = b.score and a.age = b.age;
+----+--------+-----+-------+------+-------+
| id | name   | age | score | age  | score |
+----+--------+-----+-------+------+-------+
|  4 | 敕搢謝 |  55 | A     |   55 | A     |
| 16 | 刘卟卅 |  55 | A     |   55 | A     |
|  8 | 溧况癈 |  94 | B     |   94 | B     |
|  2 | 穟玔檠 |  77 | C     |   77 | C     |
| 15 | 甔鼖苫 |  96 | D     |   96 | D     |
|  1 | 襠醞奪 |  70 | C     | NULL | NULL  |
|  3 | 繜翿宽 |  11 | A     | NULL | NULL  |
|  5 | 薰舒翎 |  86 | D     | NULL | NULL  |
|  6 | 贿怆軻 |  31 | B     | NULL | NULL  |
|  7 | 踰齁陈 |  26 | D     | NULL | NULL  |
|  9 | 捳縇睢 |  38 | D     | NULL | NULL  |
| 10 | 漲堔杙 |   0 | C     | NULL | NULL  |
| 11 | 輪塶讣 |  13 | B     | NULL | NULL  |
| 12 | 刪庝熽 |  53 | B     | NULL | NULL  |
| 13 | 鄀乹聐 |  90 | D     | NULL | NULL  |
| 14 | 婈谂畛 |  52 | B     | NULL | NULL  |
| 17 | 够負饶 |   3 | D     | NULL | NULL  |
| 18 | 瀠禮翍 |  14 | A     | NULL | NULL  |
| 19 | 仉余淳 |   5 | C     | NULL | NULL  |
| 20 | 坛唧笶 |  59 | C     | NULL | NULL  |
+----+--------+-----+-------+------+-------+
20 rows in set (0.08 sec)

左面的是原数据表的内容,右面多出来的两行是我们分组统计之后的数据。

3. 两个查询调换位置或者用右连接查询,再加个排序

mysql> select a.id, a.name, b.age, b.score from student a right join (select score,max(age) age from student group by score) b on a.score = b.score and a.age = b.age order by b.score;
+----+--------+-----+-------+
| id | name   | age | score |
+----+--------+-----+-------+
|  4 | 敕搢謝 |  55 | A     |
| 16 | 刘卟卅 |  55 | A     |
|  8 | 溧况癈 |  94 | B     |
|  2 | 穟玔檠 |  77 | C     |
| 15 | 甔鼖苫 |  96 | D     |
+----+--------+-----+-------+
5 rows in set (0.07 sec)

 

MySQL查询:Group By 后取出每一组中最大的数据

原文地址:https://www.cnblogs.com/LUA123/p/13940847.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6648.html

(0)
上一篇 2023-04-05
下一篇 2023-04-05

相关推荐

  • MySQL通讯协议(2)数据包[通俗易懂]

    MySQL通讯协议(2)数据包[通俗易懂]MySQL通讯协议(2)数据包 使用MySQL协议发送数据,有两个要求: 将数据分成大小为(2^24−1)字节的数据包 给每个数据块加上一个包头 由于连接的创建和释放都需要耗费资源,所以数据库这种交…

    2023-02-12
    153
  • Redis 过期时间与内存管理「终于解决」

    Redis 过期时间与内存管理「终于解决」http://www.redis.cn/commands/expire.html http://www.redis.cn/topics/lru-cache.html 内存管理 当 Redis 作为缓…

    2023-02-26
    142
  • 荣耀智能表哪一款最好_智能手表荣耀2和华为2的区别

    荣耀智能表哪一款最好_智能手表荣耀2和华为2的区别     几百年来人们对手表的需求,可谓是日益增长。从当初的怀表到石英表再到机械表,手表的种类也越来越多。如今,很多人佩戴的都是智能手表,不仅有手表的专属功能——记录时间的功能,还有着一些普通手表不…

    2023-02-19
    156
  • Python Dictionary: 必会技能,轻松实现快速数据查找和操控

    Python Dictionary: 必会技能,轻松实现快速数据查找和操控在Python中,Dictionary是最常用的数据结构之一,它可以将任意类型的数据映射到一个唯一的键值上。Dictionary中的数据类型可以是数字、字符串、列表、元组等,而键值必须为不可变的对象,通常是字符串或数字。Dictionary的一大特点就是它可以通过key快速地查找和操控数据,因此可以说Dictionary是Python编程必须掌握的一项技能。

    2023-12-19
    111
  • Python实现简单爬虫,抓取数据实现数据挖掘

    Python实现简单爬虫,抓取数据实现数据挖掘在信息时代,数据是非常宝贵的东西,特别是在商业、科学和社会研究等领域,数据的价值越来越被重视。而互联网又是信息获取的一个非常好的途径,因此如何高效、快速地从互联网上获取所需要的信息成为了一个非常重要的话题。针对这个问题,Python提供了非常好的解决方案,即使用Python实现简单爬虫,抓取数据实现数据挖掘。

    2024-01-26
    101
  • redis安装与使用_etc在哪里安装

    redis安装与使用_etc在哪里安装NoSQL 1. 定义 NoSQL(Not Only SQL)即不仅仅是 SQL,泛指非关系型的数据库 2. 为什么使用 NoSQL? 传统关系数据库在应付动态网站、特别是超大规模和高并发的纯动态网站

    2023-05-30
    163
  • StoneDB 首席架构师李浩:如何选择一款 HTAP 产品?[亲测有效]

    StoneDB 首席架构师李浩:如何选择一款 HTAP 产品?[亲测有效]作者:李浩 责编:宇亭 当我们选择一款 HTAP 数据库时,总是先被其相关文档里所描述的优异性能所吸引。卓越的性能是我们选择一款产品的出发点,因为我们希望该款产品能够解决我们业务中的痛点。而大家使用

    2023-06-18
    135
  • 如何使用Python过滤敏感词

    如何使用Python过滤敏感词敏感词通常指一些不能在公共场合直接展示的词汇,例如色情、政治、暴力等。在一些网站和社交媒体上,发布含有敏感词的内容往往会受到限制和审查。

    2024-08-13
    26

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注