sql中位数_在MySQL环境中如何求众数、均值和中位数
有些SQL的笔⾯试题中会出现⼀些要求众数、均值、中位数、四分位数等,我这⾥将我会的⼏种解法分享给⼤家,⼤家也可以在评论中继续补充!
样例表
(⼀)众数
如求员⼯⼯资的众数
1、使⽤having
SELECT salary,COUNT(*) AS cnt
FROM salaries
GROUP BY salary
HAVING count(*) >= ALL(SELECT COUNT(*) FROM salaries GROUP BY salary)
额外补充ALL、IN和ANY的⽤法
IN:在范围内的值,只要有就true;
ALL:与⼦查询返回的所有值
所有值⽐较为true,则返回true;
ANY:与⼦查询返回的任何值⽐较为true,只有有⼀个成⽴,则返回true;
2、使⽤max
-- 写法⼀
CREATE VIEW max_a AS
SELECT salary,COUNT(*) AS cnt
FROM salaries
mysql面试题sqlGROUP BY salary
中国传统颜SELECT salary,cnt
FROM max_a
WHERE cnt=(SELECT MAX(cnt) FROM max_a)
-
- 写法⼆
SELECT b.salary,bt
FROM
(
SELECT a.salary,at,max(at) over() AS max_cnt
FROM
(
SELECT salary,COUNT(*) AS cnt
FROM salaries
GROUP BY salary
) AS a
)
AS b
where bt=b.max_cnt
(⼆)均值
求所有员⼯的平均⼯资
1、使⽤avg
SELECT AVG(a.salary)
FROM
(SELECT SUM(salary) AS salary
静态网页模板是什么FROM salaries
GROUP BY emp_no) AS a
--因为存在⼀个员⼯,多条薪资记录的情况,所以需要先分组统计2、直接使⽤SUM()和COUNT()函数
SELECT SUM(salary)/COUNT(DISTINCT emp_no) AS avg_salary FROM salaries
(三)中位数
求员⼯⼯资的中间⽔平
openstack离线train单机版脚本安装从定义出发
对于⼀个奇数长度数组中的中位数,⼤于这个数的数值个数等于⼩于这个数的数值个数。
hw和hn型钢有什么区别当数组长度为偶数,且元素唯⼀时,中位数等于排序后中间两个数 的平均值。对这两个数来说,⼤于当前数的数值个数跟⼩于当前数的数值个数绝对值之差为 1,恰好等于这个数出现的频率。
SELECT AVG(DISTINCT a.salary) AS median_salary
FROM
(SELECT a.salary
FROM salaries AS a, salaries AS b
GROUP BY a.salary
HAVING SUM(CASE WHEN b.salary >= a.salary THEN 1 ELSE 0 END) >= COUNT(*) / 2
AND SUM(CASE WHEN b.salary <= a.salary THEN 1 ELSE 0 END) >= COUNT(*) / 2 ) AS a;
在hive环境中,可以使⽤percentile(BIGINT col, p)来查中位数,但该函数中的列只能使⽤整型,我们也可以使⽤
percentile_approx()来近似中位数,如
vlookup查两个表重复数据SELECT percentile_approx(amount,0.5)
FROM trade_2017;
SELECT percentile(int(amount),0.5)
FROM trade_2017;
(四)四分位数
后续补充
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论