边儿上的小人您要嫌碍事儿,可将鼠标放在上头,边上底下有个叉,点一下就收起来了

【笔记】greatest/least函数&Round函数

刷了一下力扣,发现有很多的函数是自己不清楚的,用了这些函数是比较容易得出结果的,不用自己费心去实现一些奇怪的东西

1.最大最小值

链接:https://leetcode.cn/problems/number-of-calls-between-two-persons/
大概就是编写 SQL 语句,查询每一对用户 (person1, person2) 之间的通话次数和通话总时长,其中 person1 < person2,且用户2和用户1的通话也算在用户1和用户2的通话
自己的方法超级奇怪

SELECT T.from_id_1 AS person1,T.to_id_1 AS person2,COUNT(1) call_count,SUM(T.duration) total_duration
FROM 
(SELECT from_id AS from_id_1,to_id AS to_id_1,duration FROM Calls WHERE from_id < to_id
UNION ALL
SELECT to_id AS from_id_1,from_id AS to_id_1,duration FROM Calls WHERE from_id > to_id) T
GROUP BY T.from_id_1,T.to_id_1

然后发现有个题解使用了least和greatest函数
大概就是
greatest/least可以接收一个或多个字面值/字段列,返回其中的最大值/最小值。
greatest/least返回的数据类型,参照第一个参数的数据类型
所以瞬间就简单了很多

select least(a.from_id, a.to_id) person1,
       greatest(a.from_id, a.to_id) person2,
       COUNT(1) call_count,
       SUM(a.duration) total_duration
  from Calls a
 group by least(a.from_id, a.to_id), greatest(a.from_id, a.to_id)

2.求平均值

可以使用ROUND
Round函数用法:

截取数字
格式如下:ROUND(number[,decimals])
其中:number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分,并四舍五入。如果为负数则表示从小数点开始左边的位数,相应整数数字用0填充,小数被去掉。需要注意的是,和trunc函数不同,对截取的数字要四舍五入。
实例

round(sum(units*price)/sum(units),2)
posted @   DbWong_0918  阅读(209)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示