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

数据库 专栏收录该内容
1 篇文章 0 订阅

背景:项目需要使用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文档

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

西酉醋

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值