MySQL解决group by分组后未排序问题

╰半橙微兮° 2024-04-06 14:20 205阅读 0赞

MySQL解决group by分组后未排序问题

  • 一、遇见问题
    • 1、错误SQL
    • 2、正确SQL

一、遇见问题

当我们要实现SQL分组后取第一条数据则需要进行排序结果作为子查询后分组

  1. CREATE TABLE `op_joke` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name1` varchar(255) DEFAULT NULL,
  4. `name2` varchar(255) DEFAULT NULL,
  5. `create_time` datetime DEFAULT NULL,
  6. PRIMARY KEY (`id`),
  7. UNIQUE KEY `index_push` (`name1`,`name2`) USING BTREE
  8. ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
  9. INSERT INTO `test_yjdsns`.`op_joke` (`id`, `name1`, `name2`, `create_time`) VALUES (9, '我', NULL, '2022-10-01 15:14:22');
  10. INSERT INTO `test_yjdsns`.`op_joke` (`id`, `name1`, `name2`, `create_time`) VALUES (10, '我', NULL, '2022-11-01 15:14:22');
  11. INSERT INTO `test_yjdsns`.`op_joke` (`id`, `name1`, `name2`, `create_time`) VALUES (11, '你', NULL, NULL);
  12. INSERT INTO `test_yjdsns`.`op_joke` (`id`, `name1`, `name2`, `create_time`) VALUES (12, '你', NULL, NULL);

在这里插入图片描述

1、错误SQL

在这里插入图片描述

2、正确SQL

语句中加个distinct就好了

  1. SELECT
  2. t1.*
  3. FROM
  4. ( SELECT DISTINCT * FROM op_joke ORDER BY create_time DESC ) t1
  5. GROUP BY
  6. t1.name1
  7. ORDER BY
  8. t1.id;

在这里插入图片描述
究其原因应该是和mysql5.7添加的derived_merge 有关系

  • 有志者自有千计万计,无志者只感千难万难。
  • 不要皱眉,即使在伤心的时刻,因为你从不知道有谁会醉心于你的笑容。
  • 再长的路,一步步也能走完,再短的路,不迈开双脚也无法到达。
  • 所谓的成熟.其实就是在不断看开狠多事情之后.更好的生活着。
  • 努力不—定改变人生,但改变人生必须努力。
  • 前面的路还很远,你可能会哭,但是—定要走下去,一定不能停。
  • 愿你所得过少时,不会终日愤愤;愿你所得过多时,不必终日惶恐。
  • 人发展的历程就象爬山,每登上一个高度都能看到更远更美的风景!
  • 重新自己的生活,即使是—个人。
  • 请成为自己心中的那个理想的大人
  • 所谓努力,就是主动而有目的的活动。——村上春树
  • 生活在阴沟里,依然有仰望星空的权利。——王尔德
  • 正是这些平凡的人生,却构成了伟大的历史。
  • 失败的人只有一种,就是在抵达成功之前放弃的人。——盖聂《秦时明月》
  • 别让任何人毁灭了你的灵魂,你要让自己坚强,只为自己坚强。

发表评论

表情:
评论列表 (有 0 条评论,205人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL GROUP BY分组查询

    在 MySQL SELECT 语句中,允许使用 GROUP BY 子句,将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,实现对每个组而不是对整个结果集进行