常用HSQL汇总(不定时添加)

常用sql汇总

数学函数

取整函数:round

语法:round(double a)
返回值:BIGINT
说明:对小数a进行四舍五入不保留小数
实例:

select round(3.14)  --结果:3
union ALL
select round(3.94)  --结果:4

指定精度取整函数: round

语法: round(double a, int b)
返回值: DOUBLE
说明: 对小数a进行四舍五入保留b位小数

select round(5.1461,2)  --结果:5.15
union ALL
select round(3.9422,2)  --结果:3.94

向下取整函数: floor

语法: floor(double a)
返回值: BIGINT
说明: 返回等于或者小于a的最大的整数

select floor(5.1461)  --结果:5
union ALL
select floor(3.9422)  --结果:3

向上取整函数: ceil/ ceiling

语法: ceil(double a)
返回值: BIGINT
说明: 返回等于或者大于a的最小的整数

select ceil(5.1461)  --结果:6
union ALL
select ceiling(3.9422)  --结果:4
union ALL
select ceiling(3)  --结果:3

正取余函数: pmod

语法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
说明: 返回正的a除以b的余数

select pmod(9,4)  --结果:9=4*2+1 故结果为1
union ALL
select pmod(9.9,3.1)  --结果:9.9=3.1*3+0.6 故结果为0.6

分位函数(中位数):percentile_approx

语法: percentile_approx (col,p,B)
返回值: double
说明: 求近似的第pth个百分位数,p必须介于0和1之间,返回类型为double,但是col字段支持浮点类型。参数B控制内存消耗的近似精度,B越大,结果的准确度越高。默认为10,000。当col字段中的distinct值的个数小于B时,结果为准确的百分位数

with a as (
    select 1 as itype
    union all 
    select 2 as itype 
    union all 
    select 3 as itype 
    union all 
    select 6 as itype 
    union all 
    select 8 as itype 
)

select percentile_approx(itype,0.5,9999) from a --结果:3
union ALL
select percentile_approx(itype,0.1,9999) from a --结果:1
union ALL
select percentile_approx(itype,0.3,9999) from a --结果:2

对数函数:log、ln、log2、log10

log语法:log(double x,double y)
返回值:double
ln语法:ln(double x)
返回值:double
说明:返回以自然常数e为底x的对数
说明:返回以x为底y的对数
log2语法:log2(double x)
返回值:double
说明:返回以2为底x的对数
log10语法:log10(double x)
返回值:double
说明:返回以10为底x的对数

select log(3,9);			--结果:2.0  3的2次方=9
select ln(7.389);			--结果:1.9999  自然常数e的平方约等于7.389,所以结果约等于2
select log2(8);				--结果:3.0  2的3次方=8
select log10(10000);		--结果:4.0  10的4次方=10000

幂运算函数:pow/power

语法:pow(double x,double y)
返回值:double
说明:返回x的y次方

select pow(2,3);		--结果:8.0  2的3次方
select power(4,2);		--结果:16.0 4的平方

自然常数的幂:exp

语法:exp(x)
返回值:double
说明:返回自然常数e的x次方

select exp(1);		--结果:2.71828
select exp(3);		--结果:20.0855

应用案例:求某个字段中所有数字的乘积

说明:这个情况可以利用对数加法的运算法则,即:同一底数的这两个数的对数的和等于两个正数的积的对数
在这里插入图片描述

with info as(
select 2 as value_1 union all
select 2 as value_1 union all
select 3 as value_1 union all
select 5 as value_1
)

select exp(sum(ln(value_1))) from info as method_1	
--结果:59.99999999  说明:结果约等于60,即2*2*3*5=60,此处是以e为底数
select pow(10,sum(log(10,value_1))) from info as method_1	
--结果也是约等于60,此处是以10为底数,也可以加上向上取整ceil函数
select ceil(pow(3,sum(log(3,value_1)))) from info as method_1	
--结果为60,需要注意,使用pow方式的时候,给定的两个底数必须相同,底数不可为1、0、负数
select pow(1,sum(log(1,value_1))) from info as method_1	
--此时结果为null

聚合函数

取最大值:max 取最小值:min 取平均值:avg 求和:sum

使用以上函数时,字段类型最好为数字类型,若为字符串类型,结果可能会有错误
计数:count
计数针对数据条数,多与distinct联用,如count(distinct uid)对uid去重计数,但不建议这样使用,效率低下

select
    max(a)  --结果:6
    ,min(a)  --结果:3
    ,avg(a) 
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Htaizzzz

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值