如何解决对列进行排序,然后在sql中选择已排序列的中间值
我有一个带有数字列的表,现在我想在排序后从列中选择中间值。
演示表
index lat_n city
1 223.0000 hyderabad
2 153.7890 chennai
3 257.8900 mumbai
现在我的输出应该是
223.0000
如果可能的话,我也想知道如何在mysql中做到这一点。
解决方法
您可以使用median
with rws as (
select 153.789 l from dual union all
select 223 l from dual union all
select 257.89 l from dual
)
select median ( l ) from rws;
MEDIAN(L)
223
如果行数是偶数,这将返回介于两个中间值中间的值
,您必须谨慎使用rownum
,因为在尝试评估结果之前必须对结果进行排序,并且除 = 1
之外,您不能使用它与相等值进行比较。 You may find this interesting。
您可以使用分析函数来获取行号和总行数:
select lat_n,city,row_number() over (order by lat_n) as rn,count(*) over () as cnt
from station
,然后在子查询(内联视图或CTE)中使用它进行过滤:
select lat_n,city
from (
select lat_n,count(*) over () as cnt
from station
)
where rn = ceil(cnt/2)
您已经说过该列是一个数字,但是带有结尾的零,看起来您可能会将其存储为字符串;在这种情况下,您可能需要在订购之前转换为数字。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。