如何编写SQL查询以从表中提取50%的记录?

问题描述

如何在ANSI sql中检索50%的记录。在MS sql Server中,我们有Top和百分比。但是我想使用Oracle和Postgresql

解决方法

在Postgres中,一个选项使用percent_rank()。假设id是您的订购栏:

select *
from (select t.*,percent_rank() over(order by id) prn from mytable t) t
where prn <= 0.5

这在Oracle中也可以使用,但是对于该数据库,我希望使用fetch子句:

select *
from mytable t
order by id
fetch first 50 percent rows only