这能给我每个公司的中位数吗?
SELECT a.id,a.company_name,a.salary FROM (SELECT id,company_name,Salary,PERCENT_RANK OVER() (PARTITION BY company ORDER BY Salary) AS 'percentile') a WHERE percentile = 0.5 GROUP BY a.id,a.company_name
bkhjykvo1#
不一定。问题是 percent_rank() 返回浮点数。而浮点比较是相当危险的——因为浮点是模糊的。为什么不用呢 percentile_cont() ?
percent_rank()
percentile_cont()
select distinct a.company_name, percentile_cont(0.5) within group (order by salary) over (partition by a.company_name) as median from a;
我敢肯定任何支持 percent_rank() 还支持 percentile_cont() 以及 percentile_disc() ,尽管确切的语法可能因数据库而异。
percentile_disc()
1条答案
按热度按时间bkhjykvo1#
不一定。问题是
percent_rank()
返回浮点数。而浮点比较是相当危险的——因为浮点是模糊的。为什么不用呢
percentile_cont()
?我敢肯定任何支持
percent_rank()
还支持percentile_cont()
以及percentile_disc()
,尽管确切的语法可能因数据库而异。