程序开发或者一些数据统计时,在MySQL中使用GROUP BY分组是很常用的SQL语句。那么,如果如下的简单示例订单数据表,我们现需要使用GROUP BY分组后查询每个用户的第一个订单记录,应该如何实现呢?

首先,我们创建示例数据表:orders,SQL语句如下:

CREATE TABLE `orders` (

`id` int(6) NOT NULL AUTO_INCREMENT,

`email_address` varchar(45) NOT NULL DEFAULT '',

`created_on` datetime DEFAULT CURRENT_TIMESTAMP,

`price` decimal(8,2) DEFAULT '0.00',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='订单表';

数据库成功创建后,我们插入一些示例数据:

INSERT INTO orders (email_address,price)VALUES('a@a.com',25.55);

INSERT INTO orders (email_address,price)VALUES('b@a.com',20.75);

INSERT INTO orders (email_address,price)VALUES('c@a.com',52.35);

INSERT INTO orders (email_address,price)VALUES('c@a.com',20.00);

INSERT INTO orders (email_address,price)VALUES('e@a.com',80.85);

INSERT INTO orders (email_address,price)VALUES('a@a.com',95.15);

INSERT INTO orders (email_address,price)VALUES('c@a.com',210.55);

INSERT INTO orders (email_address,price)VALUES('f@a.com',57.00);

以上orders表和数据都准备好之后,最后一步则需要使用GROUP BY的SQL语句来查询按用户分组的每个用户订单价格最高的第一条记录了,如下:

SELECT MIN(O.id) AS min_id

,O.email_address

,O.price

FROM orders AS O

JOIN (SELECT A.email_address,MAX(price) AS max_price

FROM orders AS A

GROUP BY A.email_address) AS T

ON T.email_address=O.email_address AND T.max_price=O.price

GROUP BY O.email_address,O.price

执行以上GROUP  BY的分组查询,结果如下截图:

关于MySQL的查询有很多方式,本文旨在提供一种可行的实现方式,如果你有其他的实现SQL语句,欢迎留言反馈,交流。

mysql查询每个用户第一条数据_MySQL数据库订单表按用户邮箱字段分组查询每个用户的第一条记录...相关推荐

  1. mysql 获取一条数据_MySQL数据库中随机获取一条或多条记录

    在开发过程中遇到了一个问题,使用MySQL数据库,用SQL语句在表中随机获取一条或多条数据,看似简单,但是往深层研究的话还是很有深度的,查了好多资料,接下来给大家分享一下: 1. 随机获取单条数据 S ...

  2. mysql插10万条数据_MySQL数据库插入100w条数据要花多久?

    MySQL数据库插入100w条数据要花多久? 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) # 多线程插入(单表) 问:为何对同一个表 ...

  3. mysql用户数据导入_mysql创建数据库、用户及导入数据_mysql数据库教程

    怎样mysql创建数据库.用户及导入数据 1. 修改MYSQL服务器字符集为utf8: 1.1 当前MYSQL服务器字符集设置 SHOW VARIABLES LIKE 'character_set_% ...

  4. mysql表如何删除一条数据_mysql如何删除表中一行数据?

    mysql中使用DELETE语句删除表中一行数据,语句为"DELETE FROM 表名称 WHERE 列名称 = 值".删除所有行的语句为"DELETE FROM tab ...

  5. mysql没有索引删除一亿数据_mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLy ...

  6. mysql怎么快速删除亿级数据_mysql数据库如何实现亿级数据快速清理

    今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下: 1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小 看到了吗,光olderdb就占了25G 2. 用SQLy ...

  7. 获取表数据_mysql数据库部分表被truncate,部分数据被delete的解决过程

    服务器数据恢复环境部署及故障原因: 华为云ECS网站服务器,服务器采用linux操作系统,数据库版本号5.6,. 在执行数据库版本更新测试时,错误地将本应在测试库执行的sql脚本执行于生产库,导致部分 ...

  8. mysql 异常关机后 无法查数据_MySQL数据库非法关机造成数据表损坏怎么排查 | 学步园...

    该篇文章我们介绍由于非法硬件关机,造成了MySQL数据库的数据表损坏,数据库不能正常运行的一个实例.下面学步园小编来讲解下MySQL数据库非法关机造成数据表损坏怎么排查? MySQL数据库非法关机造成 ...

  9. mysql导入竖杠分割的数据_MYSQL :逗号分隔串表,分解成竖表

    DROP TEMPORARY TABLE IF EXISTS Temp_Num ; CREATE TEMPORARY TABLE Temp_Num ( xh INT PRIMARY KEY ); -- ...

最新文章

  1. Samba的配置命令
  2. .Net 多线程 异步编程 Await、Async和Task
  3. Spark Core
  4. django 笔记17 ModelForm
  5. 关于style设置方法,obj.setAttribute(style.)和obj.style.stylename
  6. 感知机:Perceptron Learning Algorithm
  7. Linux-----进程获得进程号 获得父进程号 获得进程组号 getpid getppid getpgid
  8. 安装Oracle问题总结
  9. c语言冒泡排序算法解析
  10. Vieux-部分型号iPhone\iPad\iPod降级工具使用教程
  11. Turnitin查重原理是什么?
  12. 交易方法我的总结仔细看看
  13. win11如何备份系统 Windows11备份系统的设置方法
  14. 基于C的VAD实现一
  15. matplotlib无法显示中文问题的解决(全网最全)
  16. (JAVA)错误:Type mismatch: cannot convert from double to float ,这是什么意思?如何解决?
  17. [python] 分治法查找数组元素的最大值和最小值
  18. Cufllinks的安装与使用
  19. Python异常和异常处理
  20. 【踩坑专栏】NoSuchBeanDefinitionException: No qualifying bean of type ‘xxx.xxxMapper

热门文章

  1. 假如,人工智能也去摆地摊
  2. 程序员给小姐姐修电脑的最佳地方和姿势
  3. 【AI专利】中国成为全球AI专利第二大提交国,微软AI专利数比你论文字数都多...
  4. 独家 | 2019届互联网校招本科薪酬清单|湾区人工智能
  5. 毛概社会实践报告3000字
  6. python使用osgeo库_MAC下python2.7的GDAL库配置问题
  7. python面向对象和面向过程_python--什么是面向对象和面向过程,对象的进化,什么是对象...
  8. 在“后台反复读取用户相册”?微信回应:最新版本将取消
  9. 十三不香了?不止去掉刘海,iPhone14或改用QLC闪存:最高2TB容量
  10. 蚂蚁森林:不存在网友反馈的“没有造林”的情况 干旱造成梭梭矮小