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

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

文章目录

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


argMin() 和argMax()函数

argMax(arg ,val):计算‘val’字段最大值对应的arg, 如果 value 最大值对应多个 arg ,输出第一个arg值。

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.hqwc.cn/news/623165.html

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

相关文章

学习经验分享【32】本科/硕士开题报告、中期报告等写作经验分享

本科/硕士阶段首先就是要写开题报告,然后中期报告,这篇博文就是分享一下写报告的经验,避免被老师打回来。本人有丰富的写报告经验,有需要的朋友可添加文末联系方式与我联系。 一、本科开题报告的提纲 课题来源及研究的目的和意义…

lua学习笔记21完结篇(lua中的垃圾回收)

print("*****************************lua中的垃圾回收*******************************") text{id24,name"仙贝"} --垃圾回收关键字collectgarbag --获取当前lua占用内存数 k字节 返回值*1024就可以得到具体占用字节数 print(collectgarbage("count&…

运营商三要素验证API接口怎么对接

运营商三要素验证API接口又叫手机三要素验证API接口、运营商实名认证接口,这个接口是验证姓名、身份证号、手机号三者是否一致,返回验证结果,如果一致则说明三者信息匹配,可以有效确认当前注册用户的身份信息,那么运营…

系统集成项目管理工程师教程,第2章领读文字简化版来啦

上周六晚上在软考中项内进行了第2波领读,用18分钟时间领读了中项第3版教程的第2章,考虑到语音没法回放,迟到同学无法回听,所以围绕领读内容的要点,今天简要整理了一篇文字稿。 不过文字稿是精简版,如果你需…

在Vue3中如何使用H.265视频流媒体播放器EasyPlayer.js?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8&#…

【Origin+Python】使用External Python批量出图代码参考

目录 基本介绍环境配置官方代码示例基础代码详解我的代码效果视频进阶代码及去水印 基本介绍 origin2021后可以使用python实现批量绘图,一共有两种方式:一种是嵌入式Python,一种是外部Python访问Origin。详细介绍可以自己去查看,打…

shell变量类型

简介 环境变量 小结: 自定义局部变量 自定义全局变量

C# 超高速高性能写日志

1、需求 需求很简单,就是在C#开发中高速写日志。比如在高并发,高流量的地方需要写日志。我们知道程序在操作磁盘时是比较耗时的,所以我们把日志写到磁盘上会有一定的时间耗在上面,这些并不是我们想看到的。 2、解决方案 2.1、简单原理说明 使用列队先缓存到内存,然后我…

GitHub repository - Branch - SSH clone URL - Clone in Desktop - Download ZIP

GitHub repository - Branch - SSH clone URL - Clone in Desktop - Download ZIP 1. Branch2. SSH clone URL3. Clone in Desktop4. Download ZIPReferences 1. Branch 显示当前分支的名称。从这里可以切换仓库内分支,查看其他分支的文件。 2. SSH clone U…

零基础自学网络安全,真的看这一篇就够了

写这篇文章的初衷是很多朋友都想了解如何入门/转行网络安全,实现自己的“黑客梦”。 > 文章的宗旨是: 1.指出一些自学的误区。 2.提供客观可行的学习表。 3.推荐我认为适合小白学习的资源。大佬绕道哈! 自学网络安全学习的误区和陷阱 1.…

【算法一则】分隔链表

题目 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1: 输入:head [1,4,3,2,5,2], x …

iOS修改外部符号指针地址—fishhook原理

上篇文章解释了外部符号加载的原理,知道了外部函数地址最后都保存在__DATA_CONST,__got或__DATA,__lay_symbol_ptr。 因此我们如果想要hook外部函数,只需要在启动后修改这两个段内的值就行。 接下来就是怎么找到某个外部符号在__DATA_CONST,__got或__DA…