首页 / MySQL / 正文

MySQL数据库订单表按用户邮箱字段分组查询每个用户的第一条记录

8644 1评论 发布于: 2015-09-28 读完约需5分钟
程序开发或者一些数据统计时,在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的分组查询,结果如下截图: query-first-row-by-each-group 关于MySQL的查询有很多方式,本文旨在提供一种可行的实现方式,如果你有其他的实现SQL语句,欢迎留言反馈,交流。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: MySQL语句查询某一个数据库中包含某个或者某些指定字段名(列名)的所有表

下一篇: C#/.NET中删除指定文件夹下所有文件和文件夹的几种方法汇总

本文永久链接码友网 » MySQL数据库订单表按用户邮箱字段分组查询每个用户的第一条记录

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册

热门评论

12 (2015-10-13 17:07)

222332凤飞飞的奋斗
回复 赞(0)