这里所谓的分组后求中间值是个什么概念呢?
我举个例子来说明一下:
假设我们现在有下面这样一个表:
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
*/
分享到:
相关推荐
本工程为 MyBatis-Plus 的官方示例,项目结构如下: mybatis-plus-sample-quickstart: 快速开始示例 mybatis-plus-sample-quickstart-springmvc: 快速开始...mybatis-plus-sample-execution-analysis: Sql执行分析示例
T-SQL示例大全,一个很不错的SQL示例,更快速掌握SQL,推荐使用。
T-SQL示例大全,(全是T-SQL语句)
sql应用的全部示例介绍t-sqlzzzzz
SQLServer2005技术内幕T-SQL查询的代码示例
以下示例在只检索标价大于 $1000 的行后,将结果进行分组。 USE AdventureWorks; GO SELECT ProductModelID, AVG(ListPrice) AS 'Average List Price' FROM Production.Product WHERE ListPrice > $1000 GROUP BY ...
《Microsoft SQL Server 2005技术内幕:T-SQL查询》示例代码
Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。
Microsoft SQL Server 2008技术内幕:T-SQL语言基础的示例数据库无法再国外的网址上下载,这个是已经下载好的
Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码,主要是SQL脚本
T-sql基本语法示例 1.建库建表,建约束 2.查询 3.视图 4.存储过程 5.触发器
sql server T-SQl基础教程 源码和示例数据库
更新如下: (1)增加单表高性能分页存储过程(由微软MVP编写) (2)增加多表高性能分页存储过程 (3)增加CASE示例 (4)增加验证表是否存在示例
T-SQL示例大全
SQL示例库和习题,学生,教师
该书解释并比较了sql server 2000和sql server 2005在数据库开发相关问题上的解决方案,深入讨论了sql server 2005中新增的t-sql编程特性,包含了大量的代码示例、表示例和逻辑难题以帮助数据库开发人员和管理员理解...
这些示例说明了特定的SQL Server和Azure SQL数据库功能,包括内存中OLTP,主数据服务(MDS)和R服务。 管理 帮助管理SQL Server和Azure SQL数据库的示例。 教程 这些示例显示了如何使用各种编程语言(包括Python...
sql编程示例,个人的学习总结,对学习sql编程很有帮助 适合初学者学习。
Chapter 01 - SQL Windowing.sql Chapter 02 - A Detailed Look at Window Functions.sql Chapter 03 - Ordered Set Functions.sql Chapter 04 - Optimization of Window Functions.sql Chapter 05 - T-SQL ...
常用SQL示例 常用的SQL语句集锦 大小:393 字节 (393 字节)