刷了一下力扣,发现有很多的函数是自己不清楚的,用了这些函数是比较容易得出结果的,不用自己费心去实现一些奇怪的东西
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)
标签:函数,least,Round,person2,greatest,duration,id
From: https://www.cnblogs.com/jokingremarks/p/16608938.html