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文档

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值