范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL查询列必须和groupby字段一致吗?

  目录  场景:查询各部门薪水最高的员工。  MySQL group by是如何决定哪一条数据留下的?  那么target list和group by column不匹配就一定不能执行吗?
  MySQL版本:8.0.27  场景:查询各部门薪水最高的员工。CREATE TABLE `employee`  (   `id` int NOT NULL AUTO_INCREMENT COMMENT "主键ID",   `dept` int NOT NULL COMMENT "部门",   `user` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "员工",   `salary` int NULL DEFAULT NULL COMMENT "薪水",   `is_deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT "是否删除",   `remark` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT "备注",   `modify_time` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3) COMMENT "修改时间",   PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "员工" ROW_FORMAT = Dynamic;  INSERT INTO `employee` VALUES (1, 1, "张三", 1000, 0, NULL, "2021-12-23 09:20:19.606"); INSERT INTO `employee` VALUES (2, 1, "李四", 1500, 0, NULL, "2021-12-23 09:20:21.679"); INSERT INTO `employee` VALUES (3, 1, "王五", 2000, 0, NULL, "2021-12-23 09:20:23.371"); INSERT INTO `employee` VALUES (4, 2, "赵六", 1000, 0, NULL, "2021-12-23 09:21:59.373"); INSERT INTO `employee` VALUES (5, 2, "孙七", 1500, 0, NULL, "2021-12-23 09:22:15.000");
  SELECT * FROM   employee   ;
  方法一:SELECT 	t1.*  FROM 	employee t1 	LEFT JOIN employee t2 ON t2.dept = t1.dept AND t1.salary < t2.salary  WHERE 	t2.salary IS NULL;
  方法二:SELECT 	*  FROM 	( SELECT * FROM `employee` ORDER BY dept, salary DESC LIMIT 1000 ) t  GROUP BY 	dept;
  (不加limit可能会失效)
  看起来结果是一样的,但第二种其实是会有问题的。  MySQL group by是如何决定哪一条数据留下的?
  MySQL通过sql_mode来提供SQL语句的合法性检查,
  在默认情况下,MySQL允许查询列target list中出现除了group by column、聚集函数等以外的表达式。
  但是,那些不参与group by的字段具体会返回哪条数据的值在MySQL中是处于未定义规则的状态,
  MySQL不承诺一定会返回哪条数据。  分组前的数据:
  SELECT * FROM   employee   ORDER BY dept, salary DESC LIMIT 1000;
  看起来方法二返回的是每个分组中的第一条的数据,
  但实际上还会与存储引擎、物理位置、索引等有关,
  如果是InnoDB的话,取决于在B+Tree上命中的第一条索引,
  这里不展开说明,毕竟不是安全的用法,
  有的时候可能返回的结果并不是我们想要的。
  关于B+Tree,可以看下这篇文章:
  通过B+Tree平衡多叉树理解InnoDB引擎的聚集和非聚集索引
  所以对于target list中出现的不明确的列,MySQL是不确定哪一条数据留下的。
  对于语法限制比较严格的数据库,都不支持target list中出现语义不明确的列,
  MySQL中提供了一个修正的sql_mode,ONLY_FULL_GROUP_BY。  SET SESSION sql_mode = "ONLY_FULL_GROUP_BY";
  再执行方法二的SQL就被拒绝了:  SELECT 	*  FROM 	( SELECT * FROM `employee` ORDER BY dept, salary DESC LIMIT 1000 ) t  GROUP BY 	dept > 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column "t.id" which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by > 时间: 0s
  "only_full_group_by"模式下MySQL会对target list和group by column中的基础列、表达式、别名列进行严格匹配。  那么target list和group by column不匹配就一定不能执行吗?
  我们看下另外一条SQL:  # 订单 CREATE TABLE `order`  (   `order_id` int NOT NULL AUTO_INCREMENT COMMENT "订单ID",   `order_amount` int NULL DEFAULT NULL COMMENT "订单金额",   PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "订单" ROW_FORMAT = DYNAMIC;  INSERT INTO `order` VALUES (1, 100); INSERT INTO `order` VALUES (2, 103); INSERT INTO `order` VALUES (3, 100);  # 订单明细 CREATE TABLE `order_detail`  (   `order_detail_id` int NOT NULL AUTO_INCREMENT COMMENT "主键ID",   `order_id` int NOT NULL COMMENT "订单ID",   `goods` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT "商品名称",   `goods_amount` int NOT NULL COMMENT "商品金额",   PRIMARY KEY (`order_detail_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = "订单明细" ROW_FORMAT = DYNAMIC;  INSERT INTO `order_detail` VALUES (1, 1, "苹果", 10); INSERT INTO `order_detail` VALUES (2, 1, "橙子", 20); INSERT INTO `order_detail` VALUES (3, 1, "香蕉", 70); INSERT INTO `order_detail` VALUES (4, 2, "橘子", 50); INSERT INTO `order_detail` VALUES (5, 2, "菠萝", 53);
  查询订单中所有商品  SELECT 	t1.order_id, 	t1.order_amount, 	GROUP_CONCAT( t2.goods, t2.goods_amount )  FROM 	`order` t1 	LEFT JOIN order_detail t2 ON t2.order_id = t1.order_id  GROUP BY 	t1.order_id;
  这条SQL的target list和group by column并不是严格匹配的,但是也可以执行,
  注意
  t1.order_id是订单表的主键。
  所以在"only_full_group_by"模式下,如果MySQL可以确定target list中所有列的返回值,
  那么,即使target list和group by column中的基础列、表达式、别名列等不严格匹配,
  MySQL也会认为它的语义是明确的,因此该条语句可以顺利通过。
  原文 http://www.cnblogs.com/captaincat/p/15723369.html

乱改IP属地易衍生犯罪,治理重点管住源头近日,有关IP代理的黑灰产业链悄然走红网络。IP属地显示让不少网红博主大V频频人设翻车,也成了不少人的生意经。近日,澎湃新闻记者在多家电商平台搜索IP代理IP地址等关键词发现,通过中兴下大本了,6500mAh新机将至,12256G或才2099中兴这个品牌现在很积极,不管在新技术研发还是新机推陈出新的速度上,中兴和小米OV荣耀等已经无异。从产品链以及通讯实力上看,中兴还算是国产大品牌,甚至要比小米OV荣耀的5G实力更强很越来越严重了,台积电断供后,更大的问题出现文C君科讯排版C君科讯头条号原创文章,禁止抄袭,违者必究越来越严重了距离欧美科技巨头停服俄市场已经过去了2个多月,在这2个多月里,当地的软件和硬件产品获取都受到了影响,在软件层面上被列入经营异常名录?迅雷回应公司一切正常原标题被列入经营异常名录?迅雷回应公司一切正常来源大众网5月9日,深圳市迅雷网络技术有限公司(以下简称迅雷)因未按规定期限公示2021年年度报告,被列入经营异常名录引发关注。大众网5G时代了,某通讯公司行为与社会主义核心价值观相悖头号周刊2013年12月4日,某通讯公司获4G牌照,12月26日在各大报纸宣传正式商用,服务厅可以办理4G业务。A于2014年2月27日在东城区服务厅为手机号码B办理开通4G服务,马斯克发文如果我在神秘情况下死去,引发网友各种猜想埃隆马斯克5月9日在推特发布了一条关于在神秘情况下死亡的神秘推文,引发了阴谋论。(特斯拉首席执行官埃隆马斯克)这名世界首富上个月刚收购了推特,他写道如果我在神秘的情况下死去,我很高海南将以互联网回收模式推动塑料垃圾治理新华社海口5月6日电(记者陈凯姿)记者6日从海南省新闻办公室举行的新闻发布会上获悉,海南省十四五塑料污染治理行动方案日前正式印发,其中提出海南将重点发展互联网回收模式,实现塑料垃圾各方面数据全线拉满,六边形战士的vivoX80,只为给你带来最好的前不久,vivo官方在其新品发布会上又推出了一个新成员,他就是vivoX80,其作为影像旗舰,在综合实力上的表现也是同样的出众,各种豪华配置的堆叠首发天玑9000处理器vivo的自比亚迪又成功了!60分钟卖3万辆,海豹正式登场,或22万起售近几年来比亚迪起一下车型,成功的代表性车型还是非常多的,无论是轿车还是SUV,很多都成为了同级别的佼佼者,而当下的比亚迪又成功了,近一段时间比较具有热度的比亚迪海豹,正式开启了预售北医三院互联网医院新增三项服务功能,全力提升应急保障接诊能力面对来势汹汹的奥密克戎变异株,北京继续织密疫情防控网,多措并举保障群众生活。作为北京市互联网诊疗质量控制和改进中心主任委员单位,北医三院坚持疫情防控与日常医疗两手抓,争分夺秒完善升10001500元以内,8GB128GB5G版综合性价比出色,3款优选千元机10001500元以内,8128GB5G版综合性价比出色,3款优选千元机本文原创,禁止搬运和抄袭,违者必究!导语最近两个月,各大主流品牌商都在贯彻机海战术,陆续举办新品发布会推出新
5G无用论?浪费千亿元?未来三年才是发力期,华为功不可没社会主义新青年,拿起键盘随我上,吐槽大会,拒绝内卷!反卷青年文清水白鱼你对5G是否有感知?5G时代,你的生活又发生了怎样的变化?5G网络的出现可不只是为了让我们刷视频打游戏更快更流华为创始人任正非曾说,已经做好此生不再见女儿的准备加拿大作为美国的第一小弟,扮演着狗腿子的角色,在美国与华为的数次科技竞争中,通过不正当的竞争手段来给华为使绊子。华为绝地反击可以说加拿大这种小人得志的国家在中国人民心中已经是恶贯满连美国都无可奈何的中国公司!全球排名第一,不是华为,不是联想今年6月,美国正式宣布,将采购两款通过审查的大疆的无人机。而这时,大疆已经被美国制裁长达三年时间了无人机,这一新兴科技产品,如今已经成为了各个国家不可或缺的重要工具。无论是在军事上双OIS光学防抖和5摄10倍变焦,1亿像素小米CC9Pro相机配置超豪华11月5日,小米CC9Pro与小米手表新品发布会,将发布三款新品小米CC9Pro,小米手表,小米电视5系列。今天官方曝光了小米CC9Pro的相机配置,堪称史上最豪华!小米CC9Pr真实记录从安卓跳到苹果,到底是什么感受?小编今天就不给你们盘点手机了,昨天冥思苦想文章写什么主题,同事刚好换了一部苹果13,这不,文章主题不就来了吗?多年安卓用户,换到苹果到底是什么感受?(本文并无任何拉踩,请理性观看)视觉导航的扫地机能不能买?看看和激光导航的对比测试前言扫拖一体的扫地机好不好用?现在依然有人认为给它清理太麻烦,还不如手动拖地。可对于有的人来说,用了之后就再也离不开,不用弯腰不用钻床底,洗洗抹布不算啥事。我就是属于后者,用过三个推荐宏基蜂鸟fun微边框轻薄本15。6英寸i58265U独立显卡8GB数码值宏碁(Acer)宏基蜂鸟fun微边框金属轻薄本15。6英寸银色i58265U四核MX130独立显卡8GB内存256GB固态硬盘3599(领劵满2000减20)17。95mm纤文科?还是理科?现阶段国内的文科生,真的没啥卵用。我们对比一下目前理科生和文科生,理科生的所接受的教育,形成了他们以解决问题为目的的思维方式,遇到问题,通过分析问题,分析可用资源,聚合资源,采取合解码器里的小米,说说性能小钢炮拓品E30DAC监听音箱的听感一选择过程去年购入IKiLoudMM后,一直想弄个千元左右的DAC试试能不能压榨音箱的潜能。最开始的时候用索尼NWA45接上电脑试了试USBDAC功能,效果感觉还不如直接接电脑。这微博像素级抄袭小厂App?连水印都没去掉居然还不认账?码君今天想跟大家聊一个颇为严肃的话题。不知道大家有没有经历过,自己辛苦做出的心血作品,被他人随意剽窃这样的事情呢?想要申诉维权,却又因为抄袭方能量过大而举步维艰?最近,就有这样一家推荐三星平板10。5英寸WIFI版八核6G128G7040mAh指纹识别数码值三星TabS5eT720平板电脑采用10。5英寸SuperAMOLED25601600高清屏,8。7mm窄边框,84。8屏占比,500nit高亮度,机身厚5。5mm,重量约4