clickhouse数据库里聚合函数any的用法

文章目录

    • 需求场景
    • any相关函数
      • any函数
      • anyHeavy函数介绍
      • anyLast函数
    • 生产使用

需求场景

  • 进行分组聚合统计时,有几个字段也需要返回,但是不在聚合的需求里面。对于同一聚合条件的记录,这些字段的值,有可能会不同,但是这不重要,只要返回一个值就行
  • 具体场景是,我们记录前端设备实时上报的交通指标信息,做一些数据统计分析,为交通预测、方案生成优化服务。对于不同的天气情况(晴、雨、雪、雾等),交通情况是大不同的,路口信号机也需要不同的方案。我们记录天气时,调用实时接口,时间精确到15分钟,空间精确到行政区。一天的天气可能是有变化的,但是按照小时或天统计时,这种不同是可以忽略的,只要返回一个天气结果就可以接受
  • 但是根据SQL的语法要求,不在group by聚合条件里的字段,没法直接返回,如果是数值,可以根据通过avgsum等函数计算返回。对于字符串,就不太合适。

any相关函数

  • 都属于clickhouse聚合函数的一部分,SQL已有的聚合函数,clickhouse也都支持
  • clickhouse也有一些自有函数,any就是其一,具体可以去查看官方文档:clickhouse聚合函数

any函数

  • ClickHouseany函数,返回一个随机的元素。
  • 语法:any(column)column-字段名称
  • 选择第一个遇到的值。 查询可以以任何顺序执行,甚至每次都以不同的顺序执行,因此此函数的结果是不确定的。 要获得确定的结果,您可以使用 ‘min’ 或 ‘max’ 功能,而不是 ‘any’.
  • 在某些情况下,可以依靠执行的顺序。 这适用于SELECT来自使用ORDER BY的子查询的情况。
  • 当一个 SELECT 查询具有 GROUP BY 子句或至少一个聚合函数,ClickHouse(相对于MySQL)要求在所有表达式 SELECT, HAVING,和 ORDER BY 子句可以从键或聚合函数计算
  • 换句话说,从表中选择的每个列必须在键或聚合函数内使用。 要获得像MySQL这样的行为,您可以将其他列放在 any 聚合函数

anyHeavy函数介绍

  • ClickHouseanyHeavy函数,返回一个频繁出现的元素。
  • 语法:anyHeavy(expression)column-字段名称
  • 选择一个频繁出现的值,使用heavy hitters 算法
  • 如果某个值在查询的每个执行线程中出现的情况超过一半,则返回此值
  • 通常情况下,结果是不确定的。
  • 查询实例 SELECT anyHeavy(AirlineID) AS res FROM ontime;

anyLast函数

  • ClickHouseanyLast函数,选择遇到的最后一个值
  • 语法:anyLast(expression)column-字段名称
  • 其结果和any 函数一样是不确定的

生产使用

  • 这里给出我们的一个简单示例,查询事件类型与数量,以及当时的天气情况
  • 业务要求,按照一天聚合时,返回天气字段时,只需要返回当天出现最频繁的天气即可
  • SQL如下:
  • 天气使用的anyHeavy,返回当天出现最多的;星期几使用的any;节假日使用的anyLast。后两个其实也可以放入聚合条件,但我怕聚合字段太多影响查询效率,没放进去,为了示例,特意使用了anyanyLast
SELECTtoStartOfInterval(time_stamp , INTERVAL 1 day) as time_stamp2 ,sum(case when event_code in ('CONGESTION', 'SEVERE_CONGESTION', 'MILD_CONGESTION') then 1 else 0 end) as congestionCount,sum(case when event_code = 'REVERSE_DRIVE' then 1 else 0 end) as reverseDriveCount,sum(case when event_code = 'PEDESTRIAN_DETENTION' then 1 else 0 end) as detainCount,sum(case when event_code = 'OVERFLOW' then 1 else 0 end) as overflowCount,sum(case when event_code = 'LOCKED' then 1 else 0 end) as lockedCount,anyHeavy(weather) as weather,any(week_type) as weekType,anyLast(date_type) as dateType
FROMtraffic_event
where1 = 1and time_stamp < '2023-05-17 11:15:28'and date_type = 'WEEKDAY'
GROUP BYtime_stamp2
order bytime_stamp2
limit 0 ,15

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为OD机考--食堂供餐--带答案

题目描述&#xff1a; 某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0&#xff0c;食堂的供餐速度必须要足够快。现在需要根据以往员工取餐的统计信息&#xff0c;计算出一个刚好能达成排队时间为0的最低供餐速度。即&#xff0c;食堂在每个单位时间内必须至少做出…

Psim 2022仿真软件的安装--Psim电力仿真实战教程

文章目录 Psim 2022 仿真软件安装及使用教程软件介绍1.下载psim 2022安装软件&#xff0c;有需要的亲请联系作者。2.点击安装文件3.点击进行安装&#xff1a;4.安装完成&#xff0c;打开软件&#xff0c;开始仿真5.仿真模型介绍5.1.单相全控整流电路仿真5.2 三相PFC可控整流电路…

红黑树深入剖析【C++】

目录 一、红黑树概念 二、红黑树节点结构设计 三、插入操作 处理情况1 处理情况2 处理情况3 插入总结&#xff1a; 四、插入操作源码 五、红黑树验证 一、红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0…

Selenium+Java环境搭建(测试系列6)

目录 前言&#xff1a; 1.浏览器 1.1下载Chrome浏览器 1.2查看Chrome浏览器版本 1.3下载Chrome浏览器的驱动 2.配置系统环境变量path 3.验证是否成功 4.出现的问题 结束语&#xff1a; 前言&#xff1a; 这节中小编给大家讲解一下有关于Selenium Java环境的搭建&…

Docker 的数据管理 与 Dockerfile

目录 Docker 的数据管理容器互联&#xff08;使用centos镜像&#xff09;Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建镜像加载原理 Dockerfile 操作常用的指令&#xff08;1&#xff09;FROM 镜像&#xff…

docker—springboot服务通信

文章目录 docker—springboot服务通信一、方式1、host 二、坑点末、参考资料 docker—springboot服务通信 一、方式 1、host 步骤&#xff1a; host文件增加域名解析&#xff1a; 127.0.0.1 rabbitmqapplication.yml&#xff1a; application.yml中&#xff0c;连接方式使用…

[STL]list使用介绍

[STL]list使用 注&#xff1a;本文测试环境是visual studio2019。 文章目录 [STL]list使用1. list介绍2. 构造函数3. 迭代器相关函数begin函数和end函数rbegin函数和rend函数 4. 容量相关函数empty函数size函数 5. 数据修改函数push_back函数和pop_back函数push_front函数和pop…

Python MySQL

pymysql 除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。 在Python中&#xff0c;使用第三方库&#xff1a;pymysql 来完成对MySQL数据库的操作。 安装&#xff1a; pip install pymysql 或在pycharm中搜索pymysql插件安装 创建到MySQ…

在CSDN学Golang云原生(Docker容器)

一&#xff0c;Doker 命令行操作 在Go语言中&#xff0c;可以通过调用Docker命令行工具来进行容器管理和操作。下面是一些基本的Docker命令行操作示例&#xff1a; 启动一个新容器 cmd : exec.Command("docker", "run", "-d", "nginx&qu…

C++(14):重载运算与类型转换

当运算符被用于类类型的对象时&#xff0c;允许我们为其指定新的含义&#xff1b;同时&#xff0c;也能自定义类类型之间的转换规则。和内置类型的转换一样&#xff0c;类类型转换隐式地将一种类型的对象转换成另一种我们所需类型的对象。 当运算符作用于类类型的运算对象时&a…

设计模式-策略模式

文章目录 策略模式 策略模式 策略模式是一种行为型设计模式&#xff0c;它允许在运行时动态改变对象的行为。在策略模式中&#xff0c;算法被封装在独立的策略类中&#xff0c;使得它们可以互换使用。下面是一个简单的例子&#xff1a; 假设我们有一个计算税收的系统&#xf…

2022年全国职业院校技能大赛高职组软件测试赛项赛题评分标准

任务 考查点 评分标准 评分细则 分值 任务一 环境搭建及系统部署 &#xff08;5分&#xff09; 环境搭建及系统部署包括搭建与配置测试环境&#xff0c;安装与部署应用系统等&#xff0c;对过程和结果进行截图&#xff0c;完成环境搭建及系统部署报告 1.测试环境搭建与…

小程序附件下载并预览功能

一、实现的功能&#xff1a; 1、word、excel、图片等实现下载并预览 2、打开文件后显示文件名称 二、代码&#xff1a; // 判断文件类型whatFileType(url) {let sr url.lastIndexOf("."); // 最后一次出现的位置let fileType url.substr(sr 1); // 截取url的…

超越传统测试:如何构建可靠的持续集成测试管道

超越传统测试&#xff1a;如何构建可靠的持续集成测试管道 引言 持续集成测试是现代软件开发中至关重要的一环&#xff0c;它可以帮助团队及时发现和解决代码问题&#xff0c;提高软件质量。然而&#xff0c;传统的测试方法往往存在效率低、容易出错等问题。本篇博客将介绍如…

Java接口通过token登录实现页面跳转到登录成功后的页面

首先&#xff0c;你需要在接口请求中将token作为参数传递给后端&#xff0c;后端需要对token进行验证并获取登录用户的信息。 在验证通过后&#xff0c;你可以将登录成功后的页面链接返回给前端&#xff0c;前端通过跳转到该链接来实现页面跳转。 以下是一个简单的Java代码演…

手机图片转pdf?两种方法介绍

手机图片转pdf&#xff1f;如今&#xff0c;随着生活的数字化&#xff0c;我们的手机中储存了大量的照片。但是&#xff0c;如果需要将这些照片转换成PDF格式&#xff0c;该怎么办呢&#xff1f;下面&#xff0c;小编就给大家介绍三种方法来实现这一目标。 第一种方法&#xff…

12页线性代数图解教程,github星标9.1k,适合小白

线性代数“困难户”注意&#xff0c;今天我给大家分享一个超适合小白的线性代数学习笔记&#xff0c;只有12页纸&#xff0c;一半都是图解&#xff0c;不用担心看不懂。 这份笔记名为《线性代数的艺术》&#xff0c;是日本学者Kenji Hiranabe基于Gilbert Strang教授的《每个人…

JS常用操作数组的方法整理

JavaScript提供了许多用于操作数组的方法。以下是其中一些常见的方法&#xff1a; 1. push() : 将一个或多个元素添加到数组的末尾&#xff0c;并返回新数组的长度。 2. pop() : 移除并返回数组的最后一个元素。 3. unshift() : 将一个或多个元素添加到数组的开头&#xff0…

【Pytorch学习】pytorch中的isinstance() 函数

描述 isinstance() 函数来判断一个对象是否是一个已知的类型&#xff0c;类似 type()。 isinstance() 与 type() 区别&#xff1a; type() 不会认为子类是一种父类类型&#xff0c;不考虑继承关系。 isinstance() 会认为子类是一种父类类型&#xff0c;考虑继承关系。 如果要判…

Lambda表达式常见的Local variable must be final or effectively final原因及解决办法

目录 Local variable must be final or effectively final错误原因 解决办法按照要求定义为final&#xff08;不符合实情&#xff0c;很多时候是查库获取的变量值&#xff09;使用原子类存储变量&#xff0c;保证一致性AtomicReference常用原子类 其它 Local variable must be …