原文: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. Automatically generate serial number in abap

    流水号的产生:   在ABAP开发中,很多地方都需要按照自己的规则生成流水号,把这些流水号保存进透明表,作为唯一标示. 一. 系统中设定流水号 使用T-Code SNRO来创建一个流水号标识对象. 输 ...

  2. STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測

    基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务.实现对温湿度.超声波.声音.光敏等传感器的控制及实时数据採集. 14.1开发环境说明 硬件:STM32W1 ...

  3. Qt国际化相关类

    QTextCodec QTextCodec为文本编码之间提供转换. Qt用Unicode 来存储,绘制和操作字符串.在很多情况下你可能希望操作不同编码的数据.例如,大部分日本文档是以Shift-JIS ...

  4. Android4.4 Framework分析——Zygote进程的启动过程

    Android启动过程中的第一个进程init.在启动过程中会启动两个关键的系统服务进程ServiceManager和Zygote. 本文要介绍的就是Zygote进程的启动,Zygote俗称孵化器,专门 ...

  5. 【剑指offer】设置在最小数目的阵列

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/28128551 题目描写叙述: 输入一个正整数数组,把数组里全部数字拼接起来排成一个数.打印 ...

  6. 不合规范的html段落php处理细则

    最近业余时间在维护一个rss聚合应用,就发现很多网站feed的条目摘要存在各种问题,用strip_tags一刀切吧,对摘要的段落和样式扭曲了 例如:有一些网站的摘要是截断输出,例如指定的摘要长度截断, ...

  7. 如何判断一个Http Message的结束——python源码解读

    HTTP/1.1 默认的连接方式是长连接,不能通过简单的TCP连接关闭判断HttpMessage的结束. 以下是几种判断HttpMessage结束的方式: 1.      HTTP协议约定status ...

  8. [Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果

    原文:[Windwos Phone] 实作地图缩放 MapAnimationKind 属性效果 [前言] 使用经纬度来定位地图的位置,以及使用 MapAnimationKind 属性来设定地图缩放时的 ...

  9. trie + 长度优先匹配,生成串

    import com.google.common.collect.Maps; import java.util.Map; /** * tree 节点 * Created by shuly on 16- ...

  10. [原创] linux deepin 2014.1下编译putty

    在网上找了很久,都没有找到linux下直接可以用的putty程序,最终在putty官网找到了源代码 点击下载 把源代码下载回来. 1.下载源代码 2.安装依赖库 如果系统中没有安装过libgtk2.0 ...