ClickHouse--17--argMin() 和argMax()函数

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • argMin() 和argMax()函数
  • 业务场景使用案例
    • 1.准备表和数据:
    • 业务场景一:查看salary 最高和最小的user
    • 业务场景二:根据更新时间获取最新/最早记录
    • 业务场景三:获取user工资变化详情
    • 注意


argMin() 和argMax()函数

argMax(arg ,val):计算 ‘arg’ 最大值 ‘val’ 价值。 如果有几个不同的值 ‘arg’ 对于最大值 ‘val’,遇到的第一个值是输出。

argMin() 与argMax() 的功能正好是相反的,👇是Clickhouse官方文档对这个函数的解释,看官应该看知道这个函数是用途了吧。

在这里插入图片描述

业务场景使用案例

1.准备表和数据:

 1 drop table if exists salary;2  create table salary3 (4     `id` Int32,5     `user` String,6     `user_id` Int32,7     `salary` Int32 ,8     `created_at` Datetime ,9     `updated_at` Datetime
10 ) engine = Memory;
11 
12 select * from salary;
13
14 insert into salary (id,user,user_id,salary,created_at,updated_at) Values
15 (1,'Jim',101,10000,'2020-05-01 00:00:00','2020-05-01 00:00:00'),
16 (2,'Tom',102,15000,'2020-05-01 01:00:00','2020-05-01 00:00:00'),
17 (3,'Tony',103,20000,'2020-05-01 00:00:00','2020-05-01 00:00:00'),
18 (4,'Judy',104,25000,'2020-05-01 00:00:00','2020-05-01 00:00:00'),
19 (5,'Lucy',105,80000,'2020-05-01 00:00:00','2020-05-01 00:00:00'),
20 
21 select * from salary;

在这里插入图片描述

业务场景一:查看salary 最高和最小的user

 select 'Max Salary User' as Type ,argMax(user,salary)  as user from salaryUNION ALLselect 'Min Salary User' as Type, argMin(user,salary)  as user from salar

在这里插入图片描述

业务场景二:根据更新时间获取最新/最早记录

这两个函数可以应用到数据updated 上,非常好用,比如user_id = 101 的salary 数据updated 了,数据产生了一条新的记录;

我们可以根据updated_at的时间拿到每个用户一段时间内数据的最新记录或者最早记录

1   insert into salary (id,user,user_id,salary,created_at,updated_at) Values
2   (1,'Jim',101,15000,'2020-05-02 00:00:00','2020-05-02 00:00:00');
3 
4  select * from  salary;

在这里插入图片描述
argMax查看user最新记录:

 selectid,argMax(user,updated_at) as user,argMax(user_id,updated_at) as user_id,argMax(salary,updated_at) as salary,argMax(created_at,updated_at) as created_atfrom salarygroup by idorder by id asc;

最新记录👇:我们通过结果可以看到user =Jim,是工资有调整了,最开始的时候salary = 10000,目前的salary = 15000,通过argMax() 取到最新的记录,这个函数间接的实现了数据的updated 的功能,clickhouse 既可以查看历史的所有数据,又可以很好的查看最新的数据。

在这里插入图片描述
argMin()查看user最早记录:

  selectid,argMin(user,updated_at) as user,argMin(user_id,updated_at) as user_id,argMin(salary,updated_at) as salary,argMin(created_at,updated_at) as created_atfrom salarygroup by idorder by id asc;

在这里插入图片描述

业务场景三:获取user工资变化详情

想知道公司每个user 的最早期的工资和目前的薪资,以及涨幅和变化情况,根据员工表现合理安排员工的福利:

1  select user_id,
2        argMax(user,updated_at) as user,
3         argMin(salary,updated_at) as history_salary,
4         argMax(salary,updated_at) as lasted_salary,
5         argMax(salary,updated_at) - argMin(salary,updated_at) as difference,
6         (argMax(salary,updated_at) - argMin(salary,updated_at)) / argMin(salary,updated_at) as "The percentage of difference"
7  from salary
8  group by user_id;

在这里插入图片描述

注意

需要注意的是argMax() ,argMin() 函数的时候,如果有用上where 条件的时候,就要优先去一段时间范围的数据,然后嵌套后再做Where 条件的过滤哦;否则你符合你where过滤的条件的数据,不一定是最新的数据。

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

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

相关文章

再也不怕面试官问 OOM了,一次生产环境 Metaspace OOM 排查流程实操!

问题背景 小奎公司的运维同时今天反映核心业务一个服务目前 CPU 的使用率、堆内存、非堆内存的使用率有点高。刚反映没有过多久该服务就直接 OOM 了,以下是生产监控平台监控信息。 CPU 使用率监控 堆内存和非堆内存使用率 OOM 产生的日志报错信息 问题分析 根…

Go第三方框架--ants协程池框架

1. 背景介绍 1.1 goroutine ants是站在巨人的肩膀上开发出来的,这个巨人是goroutine,这是连小学生都知道的事儿,那么为什么不继续使用goroutine(以下简称go协程)呢。这是个思考题,希望讲完本文大家可以有个答案。 go协程只涉及用…

【STL】队列(queue)

队列 queue没有迭代器 Queue所有元素的进出都必须符合”先进先出”的条件&#xff0c;只有queue的顶端元素&#xff0c;才有机会被外界取用。Queue不提供遍历功能&#xff0c;也不提供迭代器。 头文件&#xff1a; #include <queue>queue<T> queT;//queue采用模…

Docker部署minio集群

1.基本定义 由于是非常轻量级的软件&#xff0c;所以架构上也没有这么复杂&#xff0c;他使用操作系统的文件系统作为存储介质&#xff0c;我们在向任意节点写数据的时候&#xff0c;minio会自动同步数据到另外的节点&#xff0c;而机制叫做erasure code&#xff08;纠删码&am…

Java基础知识总结(48)

&#xff08;1&#xff09;super关键字 1. super代表父类对象 2. 在构造器中访问父类的构造器&#xff08;创建子类对象时会先创建父类对象&#xff09; 3. super访问父类的实例变量 4. 访问父类的实例方法 如&#xff1a;/*** 父类* author Ray**/public class Animal {String…

linux内核驱动-在内核代码里添加设备结点

linux中&#xff0c;一切皆文件 我们在用户层用一些系统函数&#xff08;如&#xff1a;fopen等等&#xff09;时&#xff0c;会进入内核&#xff0c;内核会在字符注册了的设备号链表中查找。如果找到就运行我们写的设备文件的&#xff08;驱动&#xff09;函数 我们在前面已经…

【滑动窗口】无重复字符的最长字串

给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度 示例 1: 输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2: 输入: s "bbbbb"输出: 1解释: 因为无重复字…

day54 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含手续费

题目1&#xff1a;309 买卖股票的最佳时机含冷冻期 题目链接&#xff1a;309 买卖股票的最佳时机含冷冻期 题意 整数数组prices中prices[i]表示第i天的股票价格&#xff0c;可以进行多次交易&#xff0c;但是在卖出股票后&#xff0c;无法在第二天买入股票&#xff08;冷冻期…

设计模式(017)行为型之责任链模式

责任链模式&#xff0c;它允许你将请求沿着处理者链传递&#xff0c;直到有一个处理者能够处理该请求为止。在责任链模式中&#xff0c;有三个核心角色&#xff1a;请求者&#xff08;Client&#xff09;、处理者&#xff08;Handler&#xff09;、以及具体处理者&#xff08;C…

RuoYi-Vue若依框架-vue前端给对象添加字段

处理两个字段的时候有需求都要显示在下拉框的同一行&#xff0c;这里有两种解决方案&#xff0c;一是后端在实体类添加一个对象&#xff0c;加注解数据库忽略处理&#xff0c;在接口处拼接并传给前端&#xff0c;二是在前端获取的数据数组内为每个对象都添加一个字段&#xff0…

cannal的使用

搭建MySQL 安装canal 1.新建文件夹logs, 新建文件canal.properties instance.properties docker.compose.yml instance.properties ################################################# ## mysql serverId , v1.0.26 will autoGen # canal.instance.mysql.slaveId0# enable g…

06 Php学习:字符串

PHP 中的字符串变量 在 PHP 中&#xff0c;字符串是一种常见的数据类型&#xff0c;用于存储文本数据。字符串变量可以包含字母、数字、符号等字符&#xff0c;并且可以进行各种操作和处理。以下是关于 PHP 中字符串变量的一些重要信息&#xff1a; 定义字符串变量&#xff1…

【SpringBoot3】Bean管理

1.Bean扫描 1.1传统Spring 标签&#xff1a;<context:component-scan base-package"com. example "/>注解&#xff1a;ComponentScan(basePackages "com.example") 1.2SpringBoot SpringBoot默认扫描启动类所在的包及其子包 2.Bean注册 如果要注…

Linux从入门到精通 --- 1.初始Linux

文章目录 第一章&#xff1a;1.1 Linux的诞生1.2 Linux系统内核1.3 Linux系统发行版 第一章&#xff1a; 1.1 Linux的诞生 1991年由林纳斯 托瓦兹创立并发展至今称为服务器操作系统领域的核心系统。 1.2 Linux系统内核 Linux内核提供了系统的主要功能&#xff0c;甚至是开源…

最大公约数算法详解

一、引言 最大公约数&#xff08;Greatest Common Divisor&#xff0c;GCD&#xff09;是数学中一个非常重要的概念。在计算机科学中&#xff0c;求解最大公约数不仅是数学问题的实际应用&#xff0c;也是算法设计的基本技能之一。本文将详细介绍几种常见的求解最大公约数的算…

【JS】判断双层数组中每一项是否都不为空

需求 判断双层数组中每一项是否都不为空&#xff0c;都不为空返回true&#xff0c;否则返回false 数组格式&#xff1a; arr1 [{list: [12, 25, 7, 18, 55]},{list: [36, 9]} ] arr2 [{list: [12, , 7, , 55]},{list: [36, 9]} ]实现 export function checkEmpty(arr) {le…

坚持十天做完Python入门编程100题第三天

坚持十天做完Python入门编程100题第三天 第15题 依次输出列表的元素和下标第16题 编写加速度函数第17题 编写函数计算球的体积第18题 函数默认值参数第19题 全局变量第20题 局部变量第21题 字符串格式化第22题 字符串格式化&#xff08;二&#xff09;第23题 字符串分隔 第15题…

SQL注入sqli_labs靶场第五、六题

第五题 根据报错信息&#xff0c;判断为单引号注入 没有发现回显点 方法&#xff1a;布尔盲注&#xff08;太耗时&#xff0c;不推荐使用&#xff09; 1&#xff09;猜解数据库名字&#xff1a;&#xff08;所有ASCII码值范围&#xff1a;0~127&#xff09; ?id1 and length…

TDengine too many open files

too many open files 是比较常见的报错&#xff0c;尤其使用TDengine 3.0 集群时&#xff0c;大概率会遇到。这个报错很简单&#xff0c;但要想顺利解决&#xff0c;却涉及到很多知识点。 目录 知识点&#xff1a;fs.nr_open知识点&#xff1a;file-max & fs.file-nr知识点…

stl set 的 insert()

set 跟 map 容器很像&#xff0c;但它俩又有很大的不同&#xff0c;它们的底层实现都是树&#xff0c;元素都是有序的&#xff0c;但map是可以修改元素的&#xff0c;而 set 就不行了&#xff0c;set 里的元素只有删除的情况&#xff0c;没有修改的情况&#xff1b;所以发现没有…