admin管理员组文章数量:1516870
mysql分组求最大ID记录行方法
##创建表
代码语言:javascript代码运行次数:0运行复制CREATE TABLE `test_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`order_no` BIGINT(20) DEFAULT NULL,
`amt` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4##插入测试数据
代码语言:javascript代码运行次数:0运行复制INSERT INTO `test_user`(`id`,`order_no`,`amt`)
VALUES
(1,111,100),
(2,222,200),
(3,333,300),
(4,111,101),
(5,111,102),
(6,222,201),
(7,222,202),
(8,333,301),
(9,333,302);##DEMO1:找出最大的金额
代码语言:javascript代码运行次数:0运行复制SELECT id,order_no,MAX(amt) FROM `test_user`
GROUP BY order_no
/**
期望结果:
"id" "order_no" "max(amt)"
"1" "111" "102"
"2" "222" "202"
"3" "333" "302"
**/##DEMO2:根据每个订单号找出ID最大的一行记录
代码语言:javascript代码运行次数:0运行复制/**
期望结果:
"id" "order_no" "amt"
"5" "111" "102"
"7" "222" "202"
"9" "333" "302"
**/##ID最小的这一行,不符合要求,以下5个方法。
代码语言:javascript代码运行次数:0运行复制SELECT * FROM `test_user` GROUP BY order_no##简单方法:倒序然后再分组,可以查询出来。
代码语言:javascript代码运行次数:0运行复制SELECT t.* FROM (
SELECT * FROM `test_user` ORDER BY id DESC
) t GROUP BY order_no##找出最大的这一条记录数 ##方法1 根据ID来关联
代码语言:javascript代码运行次数:0运行复制SELECT * FROM `test_user` t
WHERE id = (SELECT MAX(id) FROM test_user WHERE order_no = t.order_no);##方法2 根据中间表的订单号和max ID来关联
代码语言:javascript代码运行次数:0运行复制SELECT t.* FROM `test_user` t,
(SELECT order_no,MAX(id) maxId FROM `test_user` GROUP BY order_no) t2
WHERE t.order_no = t2.order_no AND t.id=t2.maxId;##方法3 NOT EXISTS
代码语言:javascript代码运行次数:0运行复制SELECT * FROM `test_user` t
WHERE NOT EXISTS (SELECT 1 FROM test_user WHERE order_no = t.order_no AND id > t.`id`);##方法4 根据LEFT JOIN的订单号和max ID来关联 (方法2的另外一种表现形式)
代码语言:javascript代码运行次数:0运行复制SELECT t.* FROM `test_user` t
INNER JOIN (SELECT order_no,MAX(id) maxId FROM `test_user` GROUP BY order_no) t2
ON t.order_no = t2.order_no AND t.id=t2.maxId;##方法5 (方法3的另外一种表现形式) 查询count为0的情况
代码语言:javascript代码运行次数:0运行复制SELECT * FROM `test_user` t
WHERE 1 > (SELECT COUNT(1) FROM test_user WHERE order_no = t.order_no AND id > t.`id`);本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-05-12,如有侵权请联系 cloudcommunity@tencent 删除defaultmaxmysqlnullselect本文标签: mysql分组求最大ID记录行方法
版权声明:本文标题:mysql分组求最大ID记录行方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/shuma/1754990652a3182188.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论