sql语句求平均值

qwaszx1111cv 2014-03-30 07:45:35
具体要求如下:
在同一表中,有不同的商家id,与他们的每次的送货时间,想用sql语句计算每个商家前50次的平均送货时间!急求答案!谢谢!
...全文
5331 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
两个查询结合起来就够了
gw6328 2014-03-31
  • 打赏
  • 举报
回复

-->借用叶子的数据
--> 测试数据:@T
declare @T table(shop_id int,orderid int,ord_sendtime int)
insert @T
select 1,2,20 union all
select 1,4,40 union all
select 1,5,50 union all
select 1,6,60 union all
select 1,7,70 union all
select 2,8,80 union all
select 2,9,40 union all
select 2,1,10 union all
select 2,3,20 union all
select 2,4,40



--SELECT * FROM @t;

;WITH cte AS (
	SELECT rn=ROW_NUMBER() OVER(PARTITION BY shop_id ORDER BY orderid asc),* FROM @T 
)
SELECT shop_id,AVG([ord_sendtime]) AS 平均时间 FROM cte WHERE rn<=50 GROUP BY shop_id
祥子爱游戏 2014-03-31
  • 打赏
  • 举报
回复
我记得有个avg函数的,还有sum,count,其他不记得了
qwaszx1111cv 2014-03-31
  • 打赏
  • 举报
回复
大家 我知道了!!!avg(nullif(ord_sendtime,0))
qwaszx1111cv 2014-03-31
  • 打赏
  • 举报
回复
算ord_sendtime的平均值!!加分30!!求sql语句!!
qwaszx1111cv 2014-03-31
  • 打赏
  • 举报
回复
那个懂了!!现在就想问一下:

那个ord_sendtime (int) 想把值为0排除,然后算平均值!具体怎么做???在线等待!!!
wind_cloud2011 2014-03-30
  • 打赏
  • 举报
回复
引用 10 楼 u013710777 的回复:
根据sho_id获取每个商家最近20份订单的ord_sendtime,取AVG(),并将其值取出来!具体的sql语句!
SELECT avg(ord_spendtime) FROM (select top 20 * from table where sho_id='11' ) //取出11编号的商家的20条记录
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
大神啊!!
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
根据sho_id获取每个商家最近20份订单的ord_sendtime,取AVG(),并将其值取出来!具体的sql语句!
df865017 2014-03-30
  • 打赏
  • 举报
回复
谢谢了,总算明白了!
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
就是每一个商家取前50条ord_spendtime数据,那个sql语句能够再具体点吗,这我还是不懂??
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
是有订单号的!!这是数据库查询表!!
wind_cloud2011 2014-03-30
  • 打赏
  • 举报
回复
先根据ID找出50条记录,再求平均值  SELECT avg(时间) FROM (select top 50 * from table where id='厂家' order by 时间 desc)
叶子 2014-03-30
  • 打赏
  • 举报
回复

--> 测试数据:@T
declare @T table([商家id] int,[时间值] int)
insert @T
select 1,2 union all
select 1,4 union all
select 1,5 union all
select 1,6 union all
select 1,7 union all
select 2,8 union all
select 2,4 union all
select 2,1 union all
select 2,2 union all
select 2,4

;WITH m1 AS 
( SELECT ROW_NUMBER() OVER ( PARTITION BY 商家id ORDER BY GETDATE() ) AS Num , * FROM @T ),
 m2 AS ( SELECT  * FROM m1 WHERE num <= 2 )
SELECT  
	商家id , AVG(时间值) AS 平均值
FROM m2 GROUP BY 商家id 
/*
商家id        平均值
----------- -----------
1           3
2           6
*/

这是前2次的平均值
叶子 2014-03-30
  • 打赏
  • 举报
回复
引用 2 楼 u013710777 的回复:
其中,时间的类型为int
时间类型是int 我怎么区分是前后?
叶子 2014-03-30
  • 打赏
  • 举报
回复
送货时间 是个时间点? 还是个时间长度?
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
其中,时间的类型为int
qwaszx1111cv 2014-03-30
  • 打赏
  • 举报
回复
如何获取他们各自的值!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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