SQL取有效值

涉及到的函数:

Oracle:trunc、rounddown,MySQL+SQLServer:floor,ceiling

trunc(number,num_digits)  --不进行四舍五入,直接截取,num_digits默认值为0

列:

select trunc(123.456,1) from dual --123.4
select trunc(123.456,-1) from dual --120
select trunc(123,1) from dual --123

拓展:

针对日期的案例,如:

select trunc(sysdate) from dual --2017/6/13  返回当天的日期

select trunc(sysdate,'yyyy') from dual   --2017/1/1  返回当年第一天.

select trunc(sysdate,'mm') from dual  --2017/6/1  返回当月第一天.

select trunc(sysdate,'d') from dual  --2017/6/11 返回当前星期的第一天(以周日为第一天).

select trunc(sysdate,'dd') from dual  --2017/6/13  返回当前年月日

select trunc(sysdate,'hh') from dual  --2017/6/13 13:00:00  返回当前小时

select trunc(sysdate,'mi') from dual  --2017/6/13 13:06:00  返回当前分钟

rounddown (number,num_digits)  --不进行四舍五入,直接截取

round函数是会对末位进行四舍五入的,而rounddown不会,是直接截取的

---------------------------------------

floor,ceiling:试用于MySQL、SQLServer中

--floor:取小整数floor(123.45)=123 --不产生进位

--ceiling:取大整数ceiling(123.45)=124 --产生进位

--celling(12.1) 结果为 13
 
--floor(12.1)结果为 12

--------------------------------------------------------------------------------------

只截取不进位

select trunc(11.55)from dual-- -(结果为11)

select trunc(11.55,1)from dual-- -(结果为11.5)

select trunc(11.55,-1)from dual-- -(结果为1)

---------------------------------------------------------------------------------------

大于这个数的最小整数

select ceil(11.55)from dual--(结果为12)

select ceil(-11.55,1)from dual--(结果为-11)

### 如何在 SQL 中使用 AVG 函数计算平均值 `AVG()` 是 SQL 的一种聚合函数,用于返回指定列的平均值。它通常应用于数值型数据列,并忽略 `NULL` 值[^1]。 #### 使用基本语法 以下是 `AVG()` 函数的基本语法: ```sql SELECT AVG(column_name) FROM table_name; ``` 此查询会返回表中某一列的平均值。如果该列中有任何 `NULL` 值,则这些值会被自动排除在外。 #### 结合条件筛选 当需要基于某些特定条件来计算平均值时,可以在 `WHERE` 子句中加入过滤条件。例如,要找到某个部门员工的薪资平均值: ```sql SELECT AVG(salary) AS average_salary FROM employees WHERE department_id = 'sales'; ``` 这里通过 `department_id='sales'` 来限定只统计销售部员工的薪资平均数[^1]。 #### 计算非重复项的平均值 有时可能希望仅考虑唯一值来进行平均运算,在这种情况下可联合使用 `DISTINCT` 和 `AVG()` 。其结构如下所示: ```sql SELECT AVG(DISTINCT column_name) FROM table_name; ``` 比如想了解某课程成绩里不计重分后的均分情况就可以这样写: ```sql SELECT AVG(DISTINCT score) AS avg_unique_score FROM student_grades; ``` 这表示对于存在相同分数的情况只会被计入一次到最终的结果当中去[^1]。 #### 处理逻辑表达式的平均值 除了直接作用于数值字段外,还可以利用布尔类型的转换特性间接求得其他形式的数据比例关系。像下面这个例子展示了怎样获事件日期有效记录占总记录的比例: ```sql SELECT AVG(CASE WHEN event_date IS NOT NULL THEN 1 ELSE 0 END) AS valid_event_ratio FROM events_table; ``` 或者更简洁的形式就是采用if语句实现同样的效果: ```sql SELECT SUM(IF(event_date IS NOT NULL , 1, 0)) / COUNT(*) AS valid_event_ratio FROM events_table; ``` 这两种方式都实现了相同的业务需求即评估有多少百分比的日志条目包含了实际发生的日期信息[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值