怎么样用sql语句求中位价?

不叫月红
博客专家认证
2009-08-04 09:20:55
有一张订单表,想求中位价,就是先对这张表进行排序,然后求出中间的那个价格或两个价格?谢谢……
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
振乾 2009-08-05
  • 打赏
  • 举报
回复
我 个人理解你的中间价位是 排序后在中间的那一条记录,而不是 (最高+最低)/2
的计算方式。
振乾 2009-08-05
  • 打赏
  • 举报
回复
我觉得先按 价格 来个排序,rownumber 并且加一个排名列(rankID)。(select row_number() over(order by price) from XX)
获取 总共的记录数(select count(1) from XX )
判断记录数为 偶数还是奇数,
然后取出 中间的一行 ,或两行。
skeeterLa 2009-08-04
  • 打赏
  • 举报
回复
是要取
declare @rowX int,@listX int

set @rowX =select count(*) from tb
set @listX=(@rowX /2)+1

如果是2005可以写成
select top 1 @listX
from
(select top @listX id,price,name from tb order by id) A
order by id desc



guguda2008 2009-08-04
  • 打赏
  • 举报
回复
2005用ROW_NUMBER(),2000用临时表加标识列
cxmcxm 2009-08-04
  • 打赏
  • 举报
回复
declare @t table (id int identity,nameid int,price money) //nameid为物料id号
insert into @t (nameid,price) select distinct 物料id,价格 from 订单表 order by 物料id,价格 --如果重复价格不忽略时,把distinct去掉

--取一个价格
select a.nameid,a.price
from @t a, (select nameid,min(id) minid,max(id) maxid from @t group by nameid) b
where a.nameid=b.nameid and a.id=(b.maxid+b.minid)/2
--取二个价格
select a.nameid,a.price
from @t a, (select nameid,min(id) minid,max(id) maxid from @t group by nameid) b
where a.nameid=b.nameid and (a.id in ((b.maxid+b.minid)/2,b.maxid+b.minid)/2+1)
华夏小卒 2009-08-04
  • 打赏
  • 举报
回复
select (max(Price)+min(Price))/2 as pp from Tb
???

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧