原文:Sql示例说明如何分组后求中间值--【叶子】

这里所谓的分组后求中间值是个什么概念呢?

我举个例子来说明一下:

假设我们现在有下面这样一个表:

type        name price

----------- ---- ------------

2           A    5.4

2           A    3.7

2           B    4.3

1           B    4.7

2           B    6.7

2           B    9.8

3           a    3.0

3           a    4.0

3           a    10.0

3           a    20.0

我们要得到什么样的效果呢?

按type和name进行分组后求中间值:

是不是就是这样呢:

select [type],name,AVG(price) from @table

group by type,name

/*

type        name

----------- ---- ---------------------------------------

2           A    4.550000

3           a    9.250000

1           B    4.700000

2           B    6.933333

*/

不是的,我所说的中间值和平均数还不太一样,平均数就是均值,但是中间值是说分组如果有奇数个就是中间那个,如果有偶数个就是中间两个值的均值。

例如上面数据中3,a分组后有3,4,10,20四个数,那中间值就是4和10个均值。

例如上面按2,B分组后有4.3 和6.7 及9.8三个值,那中间值就是6.7

我们如何能达到这样效果呢,写个简单的例子:

declare @table table ([type] int,name varchar(1),price numeric(3,1))

insert into @table

select 2,'A',5.4 union all

select 2,'A',3.7 union all

select 2,'B',4.3 union all

select 1,'B',4.7 union all

select 2,'B',6.7 union all

select 2,'B',9.8 union all

select 3,'a',3 union all

select 3,'a',4 union all

select 3,'a',10 union all

select 3,'a',20

--sql查询如下:

;with maco as

(

select

[type],name,price,

m_asc=row_number() over(partition by type,name order by price),

m_desc=row_number() over(partition by type,name order by price desc)

from @table

)

--select * from liang

select [type],name,avg(price) as price

from maco

where m_asc in(m_desc,m_desc+1,m_desc-1)

group by type,name

order by type,name

/*

type        name price

----------- ---- -----------

1           B    4.700000

2           A    4.550000

2           B    6.700000

3           a    7.000000

*/

Sql示例说明如何分组后求中间值--【叶子】的更多相关文章

  1. SQL实现group by 分组后组内排序

    在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...

  2. sql 用Group by分组后,取每组的前几条记录

    转自:http://blog.163.com/jeson_lwj/blog/static/135761083201052411115783/ --查询每门课程的前2名成绩 CREATE TABLE S ...

  3. SQL,group by分组后分别计算组内不同值的数量

    select name as 姓名,sum( case when cargo='笔' then 1 else 0 end ) as 笔,sum( case when cargo='橡皮' then 1 ...

  4. SQL中获取排序分组后数据的脚本

    废话不多说了,先上一段代码,如下所示: select distinct   b.OrgID,b.CompanyID,b.AreaID,b.CustChannelID,b.CustID,b.SaleTo ...

  5. SQL获取分组后取某字段最大一条记录(求每个类别中最大的值的列表)

    获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from t ...

  6. SQL 分组后取最小行号记录

    本示例测试两个表联接查询后,分组并取分组后的最小行号记录 测试表: tb1表结构如下: CREATE TABLE [dbo].[tb1]( ) NOT NULL, ) NULL, ) NULL, CO ...

  7. SQL Server 分组后取Top N

    SQL Server 分组后取Top N(转) 近日,工作中突遇一需求:将一数据表分组,而后取出每组内按一定规则排列的前N条数据.乍想来,这本是寻常查询,无甚难处.可提笔写来,终究是困住了笔者好一会儿 ...

  8. sql 分组后显示每组的前几条记录

    sql 分组后显示每组的前几条记录 如   表中记录是             code       serialno             A1               1           ...

  9. sql 分组后按时间降序排列再取出每组的第一条记录

    原文:sql 分组后按时间降序排列再取出每组的第一条记录 竞价记录表: Aid 为竞拍车辆ID,uid为参与竞价人员ID,BidTime为参与竞拍时间 查询出表中某人参与的所有车辆的最新的一条的竞价记 ...

随机推荐

  1. 【设计优化】-使用缓冲(Buffer)提高程序性能

    缓冲区是一块特定的内存区域.开辟缓冲区的目的是通过缓解应用程序上下层之间的性能差异,提高系统性能. 缓冲能够协调上层组件和下层组件的性能差异.当上层组件性能因为下层组件时,能够有效地降低上层组件对下层 ...

  2. hadoop调度程序时出现“Error opening job jar”错误

    提示出现的问题: Exception in thread "main" java.io.IOException: Error opening job jar: /home/depl ...

  3. Nginx 防CC攻击拒绝代理访问

    先大概说说简单的结构…前端一个Nginx反向代理,后端一个Nginx instance app for PHP…实际上就是个Discuz,之前面对CC攻击都是预警脚本或者走CDN,但是这次攻击者不再打 ...

  4. 间隔DP基础 POJ2955——Brackets

    取血怒.first blood,第一区间DP,这样第一次没有以某种方式在不知不觉中下降~~~ 题目尽管是鸟语.但还是非常赤裸裸的告诉我们要求最大的括号匹配数.DP走起~ dp[i][j]表示区间[i, ...

  5. HDU1698_Just a Hook(线段树/成段更新)

    解题报告 题意: 原本区间1到n都是1,区间成段改变成一个值,求最后区间1到n的和. 思路: 线段树成段更新,区间去和. #include <iostream> #include < ...

  6. C++习题 复数类--重载运算符2+

    Description 定义一个复数类Complex,重载运算符"+",使之能用于复数的加法运算.参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意.例如,c1+ ...

  7. 顺序容器的insert使用方法

    #include <iostream> #include <algorithm> #include <vector> #include <string> ...

  8. [MSSQL]最小公约数

    [摘要]一个朋友在展BOM的时候有这种需求,两列字段(数值):A ,B   A=用量,B=底数,组成用量=用量/底数.A/B,若能被整除,显示整除的结果,若不能整除显示分数形式A/B(分数形式要是约分 ...

  9. Eclipse——热键&amp;Help

    版权声明:本文博主原创文章.博客,未经同意不得转载.

  10. 返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test

    原文:返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test [索引页] [源码下载] 返璞归真 ...