sql编写一个查询列的中值

eqqqjvef  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(272)

我需要从“station”表中找出一个名为“lat\u n”的列的中值我创建了一个表视图,其中有一个名为num\u row的新列和一个名为median\u table的station中的旧列“lat\u n”。我将表视图中所有行的值存储在一个名为@num\u rows的变量中。现在我用这个来寻找中值,但它显示语法错误,请帮助。

create view median_table as (SELECT ROW_NUMBER() OVER() AS num_row, lat_n FROM station order by lat_n);
select @num_rows:= count(num_row) from median_table
select avg(lat_n) as median_val from median_table
    where num_row in ((@num_rows+1)//2+(@num_rows+2)//2)
kxe2p93d

kxe2p93d1#

使用窗口函数。这里有一种方法:

select avg(lat_n)
from (select row_number() over (order by lat_n) as seqnum_asc,
             row_number() over (order by lat_n desc) as seqnum_desc,
             t.*
      from median_table t
     ) t
where seqnum_asc - seqnum_desc in (-1, 0, 1)

相关问题