sql计算众数及中位数

众数

众数:

  • 情况①:一组数据中,出现次数最多的数就叫这组数据的众数。
    举例:1,2,3,3,4的众数是3。
  • 情况② :如果有两个或两个以上个数出现次数都是最多的,那么这几个数都是这组数据的众数。
    举例:1,2,2,3,3,4的众数是2和3。
  • 情况③:如果所有数据出现的次数都一样,那么这组数据没有众数。
    举例:1,2,3,4,5没有众数。

问题:需要找出某一列的众数(即在一组数据里出现次数最多的那个数)。例如,希望找出 DEPTNO 等于 20 的部门里员工工资的众数。就如下示例而言,众数为 3000。

select sal
  from emp
 where deptno = 20
 order by sal
 
       SAL
----------
       800
      1100
      2975
      3000
      3000
  • 步骤1: DEPTNO 等于 20 的筛选条件下,将工资作为分组主键,求每一个工资金额的条目数
  • 步骤2:借助开窗函数,对条目数进行降序排列,且排序方法为dense_rank并列排序(相同的值为同一序号,不跳过重复序号——1,1,2)
  • 步骤3:筛选出排序为1的,且count条目数大于1的(排除情况3)
select sal
from (
       select sal,
       dense_rank() over(order by cnt desc) as rnk
       from (
       select sal, count(*) as cnt
       from emp
       where deptno = 20
       group by sal
     ) 
     ) 
where rnk = 1 
and cnt > 1 -- 剔除情况3

分位数

四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。它是一组数据排序后处于25%,中位数和75%位置上的值。四分位数是通过3个点将全部数据等分为4部分,其中每部分包含25%的数据.
percentile

SELECT `stock_name`, percentile(`target_amount`,0.25) FROM input
group by `stock_name` 

SELECT `stock_name`, percentile(`target_amount`,array(0.25,0.75)) FROM input
group by `stock_name`

posted @ 2023-02-05 11:22  ttttttian  阅读(1234)  评论(0)    收藏  举报