mysql数据对比工具
导读:笔者最近在采用 trino 代替旧有方案进行媒体接口数据拉取。需通过将 trino 拉取的数据入到测试库,并与旧方案拉取到生产库中的数据进行对比从而验证逻辑准确性。在进行数据对比时为提高效率因此...
2024.11.15今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢?
学习时间首先我们准备数据,有一个用户喜好表,记录了用户的喜好。比如这样:
select hobbies FROM peoples_hobbies WHERE person_id = 5;结果很多行数据:
shoppingfishingcoding那么问题来了,如果需要的输出类似于
shopping, fishing, coding一行展示就够了,不要多行展示,应该怎么写呢?或者说MySQL有没有这个能力处理呢?
当然是有的。MySQL贴心地给出了 GROUP_CONCAT 函数,用于使用分隔符连接多行字段的值。 比如说按照 person_id 进行分组,然后第二列输出用户喜好,使用逗号分隔符:
select person_id, GROUP_CONCAT(hobbies SEPARATOR ‘, ‘) AS all_hobbies FROM peoples_hobbies GROUP BY person_id;当然了,peoples_hobbies 表完全有可能在 hobbies 字段有重复的值,我们也可以进行唯一性筛选。 把上述SQL语句改造一下:
select person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ‘, ‘) AS all_hobbies FROM peoples_hobbies GROUP BY person_id;写到这里基本上已经可以满足使用了。可是我们还可以再进一步。 比如对我们的输出字段进行排序后再使用分隔符连接。
select person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ‘, ‘) AS all_hobbies FROM peoples_hobbies GROUP BY person_id;MySQL默认的单行字符数是1024,如果连接过多字段导致超出长度限制的,可以在查询之前修改变量:
SET group_concat_max_len = 2048;有的同学会说了,这次查询你改成2048,勉强过关,随着时间的增长,数据量也在增长, 这个字符串长度也是动态的,能不能自动计算出来, 省的我们每次都要重新设置,重新计算,毕竟在查询之前,谁也不知道会有多少数据出来。 当然,MySQL提供的几个简单函数,就可以轻而易举地实现。
SET group_concat_max_len = CAST((select SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(‘, ‘) FROM peoples_hobbies GROUP BY person_id) AS UNSIGNED);实时计算返回的字段长度值,实时修改限制变量值,是不是轻松了许多!
写在最后今天通过一个示例,给大家展示了MySQL内置函数 group_concat 的用法,相信下次遇到要把多行合并为一行的需求, 你也能够轻松搞定了。
Happy coding :-)
我是@程序员小助手,持续分享编程知识,欢迎关注。
导读:笔者最近在采用 trino 代替旧有方案进行媒体接口数据拉取。需通过将 trino 拉取的数据入到测试库,并与旧方案拉取到生产库中的数据进行对比从而验证逻辑准确性。在进行数据对比时为提高效率因此...
2024.11.15概述数据库中的数据直接呈现出来一般不是我们想要的,所以我们上两节演示了如何对数据进行过滤的方法。除了对数据进行过滤,我们可能还需要对数据进行排序,比如想从列表中了解消费最高的项,就可能需要对金额字段做...
2024.11.15修改MySQL数据库名称的方法如下:1.语句修改法:rename DATABASE db_name TO new_db_name这个语法在mysql 5.1.7中被添加进来,到了5.1.23又去掉了。...
2024.11.12简介MySQL GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串,也就是实现列的合并。测试创建一个测试表进行测试create table test_classes (st...
2024.11.15联合索引是什么?对多个字段同时建立的索引。联合索引是有顺序的,ABC,ACB是完全不同的两种联合索引。以联合索引(a,b,c)为例,建立这样的索引相当于建立了索引a、ab、abc三个索引。一个索引顶三...
2024.11.15