Clickhosue 强大的函数,argMin() 和argMax()函数
说实话,我喜欢Clickhouse 的函数,简单操作,功能强大。今天需要给大家介绍两个函数,argMin(),argMax()
1.argMax():计算 ‘arg’ 最大值 ‘val’ 价值。 如果有几个不同的值 ‘arg’ 对于最大值 ‘val’,遇到的第一个值是输出。argMin() 与argMax() 的功能正好是相反的,是Clickhouse官方文档对这个函数的解释,看官应该看知道这个函数是用途了吧。

当然上图是argMin() 函数的简单案例,这里我想到的几个业务场景的使用案例,仅供参考。
1 drop table if exists salary;
2 create table salary
3 (
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
1 select 'Max Salary User' as Type ,argMax(user,salary) as user from salary
2 UNION ALL
3 select 'Min Salary User' as Type, argMin(user,salary) as user from salary
结果:

业务场景二:这两个函数可以应用到数据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;
结果:

A. 查看每个user的最新工资记录:
1 select
2 id,
3 argMax(user,updated_at) as user,
4 argMax(user_id,updated_at) as user_id,
5 argMax(salary,updated_at) as salary,
6 argMax(created_at,updated_at) as created_at
7 from salary
8 group by id
9 order by id asc;
最新记录:我们通过结果可以看到user =Jim,是工资有调整了,最开始的时候salary = 10000,目前的salary = 15000,通过argMax() 取到最新的记录,这个函数间接的实现了数据的updated 的功能,clickhouse 既可以查看历史的所有数据,又可以很好的查看最新的数据。

argMin()查看最早的数据:
1 select
2 id,
3 argMin(user,updated_at) as user,
4 argMin(user_id,updated_at) as user_id,
5 argMin(salary,updated_at) as salary,
6 argMin(created_at,updated_at) as created_at
7 from salary
8 group by id
9 order by id asc;
结果:

业务场景想象:想知道公司每个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;
结果:

我们了解了这两个函数,相信还有很多很多的业务场景需要的场景都会用上它们。
Please Note:
需要注意的是argMax() ,argMin() 函数的时候,如果有 用上where 条件的时候,就要优先去一段时间范围的数据,然后嵌套后再做Where 条件的过滤哦;否则你符合你where过滤的条件的数据,不一定是最新的数据。
Clickhosue 强大的函数,argMin() 和argMax()函数的更多相关文章
- argmin ,argmax函数
在数学中,ARG MAX(或ARGMAX)代表最大值,即给定参数的点集,给定表达式的值达到其最大值: 换一种说法, 是f(x)具有最大值M的x的值的集合.例如,如果f(x)是1- | x |,那么它在 ...
- tf.argmax()函数作用
tf.argmax()函数原型: def argmax(input, axis=None, name=None, dimension=None, output_type=dtypes.int64) 作 ...
- C++ Primer--虚函数与纯虚函数的区别
首先:强调一个概念 定义一个函数为虚函数,不代表函数为不被实现的函数. 定义他为虚函数是为了允许用基类的指针来调用子类的这个函数. 定义一个函数为纯虚函数,才代表函数没有被实现. 定义纯虚函数是为了实 ...
- 你好,C++(29)脚踏两只船的函数不是好函数 5.4 函数设计的基本规则
5.4 函数设计的基本规则 函数是C++程序的基本功能单元,就像一块块砖头可以有规则地垒成一座房子,而一个个函数也可以有规则地组织成一个程序.我们在大量使用他人设计好的函数的同时,也在设计大量的函数 ...
- 【转】 C++易混知识点2. 函数指针和指针函数的区别
我们时常在C++开发中用到指针,指针的好处是开销很小,可以很方便的用来实现想要的功能,当然,这里也要涉及到指针的一些基本概念.指针不是基本数据类型,我们可以理解他为一种特殊类型的对象,他占据一定空间, ...
- 洗礼灵魂,修炼python(21)--自定义函数(2)—函数文档,doctest模块,形参,实参,默认参数,关键字参数,收集参数,位置参数
函数文档 1.什么是函数文档: 就是放在函数体之前的一段说明,其本身是一段字符串,一个完整的函数需要带有函数文档,这样利于他人阅读,方便理解此函数的作用,能做什么运算 2.怎么查看函数文档: func ...
- Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)
1.函数 我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = ...
- python协程函数、递归、匿名函数与内置函数使用、模块与包
目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...
- C/C++函数指针,指针函数的用法,用处
先看函数指针 int func2(int x); /* 声明一个函数 */ int (*q2) (int x); /* 声明一个函数指针 */ q2=func2; /* 将func函数的首地址 ...
随机推荐
- 一键创建以太坊ERC20代币教程
30秒极速创建以太坊ERC20代币 傻瓜式创建,界面化创建,自动创建代币,简单好用 合约采用新版 5.10 新版合约编译器,合约代码100%安全无任何漏洞 下面是详细的使用和创建教程 1.点击创建ER ...
- json的fromjson的方法使用。可以在volley中进行使用
Gson提供了fromJson()方法来实现从Json相关对象到Java实体的方法. 在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构. 先来看第一种: 比如jso ...
- Mysql基础知识一
1.数据库的定义 数据:描述事物符号记录.(包括数字.文字.图形.图像.声音.档案记录等)以记录形式统一的格式进行存储. 广义上的数据:出现在计算机内部的一切二进制数据流都为数据 狭义上的数据:只是数 ...
- excel完成数据库数据的批量插入
业务场景: 开发过程中往往会遇到这样情况就是产品直接给我们一堆数据,让咱们直接导入到后台数据库中,这时候咱们只需要在excel表中进行直接操作即可,如图所示(以河北省的编号为例): 而对应的数据表为: ...
- 1.Git 安装
Git的安装 阿里云镜像去下载 阿里云的镜像地址 卸载Git 1.首先在系统环境变量->path->里面去清理掉git相关的环境变量 2.然后控制面板卸载 安装Git 一直下一步即可 使用 ...
- AJ学IOS(23)UI之控制器管理
AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...
- d3限制范围缩放和平移升级到版本4
感谢您提供帮助以更新下面的代码以在版本4中工作.我已将zoom.behaviour更改为d3.zoom,但我不清楚所需的其他更改.看起来比v3还要复杂! <!DOCTYPE html> & ...
- stand up meeting 12/8/2015
part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云 -------------- -- ----------- -- PDF Reader 朱玉影 ...
- 数据结构与算法--二分搜索(binary search)
前言 之前面试准备秋招,重新翻起了<编程之美>.在第三章节看到了一道关于二分搜索的讨论,觉得有许多细节是自己之前也没怎么特别注意地方,比如二分搜索的初始条件,转化.终止条件之类的. 问题 ...
- tensorflow--filter、strides
最近还在看<TensorFlow 实战Google深度学习框架第二版>这本书,根据第六章里面对于卷基层和池化层的介绍可以发现,在执行 tf.nn.conv2d 和 tf.nn.max_po ...