栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

MySql group by 及 clickhouse 聚合函数使用问题

MySql group by 及 clickhouse 聚合函数使用问题

背景:项目需要使用clickhouse及mysql数据库,且两个库中的表需要关联查询。

一.MySQL中使用 group by

说明:理论上select 所查询的列 都需要加在group by 后面,或者使用sum()、min()等聚合函数

1.MySQL中使用group by 查询时 可以通过MySQL sql_model设置是否可以查询未使用聚合函数的列。

sql_model设置值 ONLY_FULL_GROUP_BY的语义就是确定select target list中的所有列的值都是明确语义,简单的说来,在ONLY_FULL_GROUP_BY模式下,target list中的值要么是来自于聚集函数的结果,要么是来自于group by list中的表达式的值。

如果没有定义sql_model值,MySQL可以查询 不在group by 后面的列或者没有使用聚合函数的列。

MySQL有一个机制,如果要查询的列不在group by 后,它会获取 分组内 主键id 排序的第一个数据,所以平时我们查询时会发现未使用聚合函数的列也能查询,如:

 这里面id、count列都使用了聚合函数,table_hash、sqltype_1则在group by后,而table_name和schema_name字段即不在group by后也没有使用聚合函数。

2.MySQL 在分组查询时提供了一个 分组拼接函数group_concat(),可以将组内指定的字段拼接起来。如:

二、clickhouse 中使用

1.clickhouse 中有MySQL引擎,可以创建连接进行查询,有表函数方式(mysql | ClickHouse文档)和库引擎(MySQL | ClickHouse文档)两种方式使用。

2.clickhouse中强制规定了 如果使用group by 进行分组,那select 后查询的字段必须在group by后或者使用了聚合函数。但是clickhouse 也提供了一种兼容MySQL写法的函数--> any()函数(此处附加clickhouse文档地址any | ClickHouse文档),any()函数 会获取不在group by 后的字段 在分组查询结果中第一个出现的结果(是不是和MySQL中未使用聚合函数列处理很相似!!!)。如:

 3.在clickhouse中也提供了 等同于MySQL中group_concat()的函数,如下:

groupUniqArray()等同于mysql中的 group_concat(distinct ..)

arrayStringConcat()等同于group_concat 子语句中的separator '-' 语句

countEqual() 则统计数组中元素出现的次数

最后,再次附加clickhouse官方文档,真的很好用^_^

什么是ClickHouse? | ClickHouse文档

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号