sql server 求多个字段中的最小值和最大值

程序代码园发文地址:sql server 求多个字段中的最小值和最大值-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,sql server 求多个字段中的最小值和最大值http://www.byqws.com/blog/2143.html

今天在工作中,遇到一个需求,需要把最近6个月的出库数据,去掉一个最大值一个最小值,然后剩下的4个月的数据做平均,网上找了一下,如何在这6个字段中获取最大值,最小值。没有找到可行的办法,现将我的解决办法写出来供大家参考使用。

第一、我先将6个字段的数据组合起来并用逗号隔开

第二、准备函数 fnSplit ,用于将用","逗号隔开的数据处理成表格形式。

第三、准备取最大值函数 fn_getListMax ,传入一个字符串返回其中的最大值

代码如下:

复制代码
ALTER FUNCTION [dbo].[fn_getListMax]
(
	@List varchar(200)
)
RETURNS varchar(200)
AS
BEGIN
    declare @max_ int
    declare  @temp table(
			id int IDENTITY
			,FValue int			
		)
		
		insert into @temp(FValue)
		select convert(int,item) FROM dbo.fnSplit(@List,',')
		
		set @max_ = (select top 1 FValue from @temp order by FValue desc)
		
    RETURN @max_
END

思路:

1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中

2、对临时表@temp做值的降序排序

3、将第一个数据赋值给变量 @max_

4、返回变量 @max_

返回最大值:18004

第四、准备取最小值函数 fn_getListMin,传入一个字符串返回其中的最小值

代码如下:

复制代码
ALTER FUNCTION [dbo].[fn_getListMin]
(
	@List varchar(200)
)
RETURNS varchar(200)
AS
BEGIN
    declare @min_ int
    declare  @temp table(
			id int IDENTITY
			,FValue int	
		)
		
		insert into @temp(FValue)
		select convert(int,item) FROM dbo.fnSplit(@List,',')
		
		set @min_ = (select top 1 FValue from @temp order by FValue)
		
    RETURN @min_
END

思路:

1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中

2、对临时表@temp做值的升序排序

3、将第一个数据赋值给变量 @min_

4、返回变量 @min_

返回最小值:7793

第五、准备取中间值函数 fn_getListMiddle,传入一个字符串返回其中的中间值(排除最大值和最小值其余值)

代码如下:

复制代码
ALTER FUNCTION [dbo].[fn_getListMiddle]
(
	@List varchar(200)
)
RETURNS varchar(200)
AS
BEGIN
    declare @middle_ int
    declare  @temp table(
			id int IDENTITY
			,FValue int
			,type varchar(200)			
		)
		
		insert into @temp(FValue)
		select convert(int,item) FROM dbo.fnSplit(@List,',')
		
		update @temp set type = 'max' where id = (select top 1 id from @temp order by FValue desc) 
		update @temp set type = 'min' where id = (select top 1 id from @temp order by FValue)
		
		set @middle_ = (select sum(convert(int,FValue)) from @temp where type is null)
		
    RETURN @middle_
END

思路:

1、将传进来的字符串用 函数 fnSplit 处理后将结果写进临时表 @temp 中

2、临时表@temp 中这次多了一个字段 type ,通过对 值 FValue 的升序和降序排序,更新字段 type 为 "max","min"

3、将字段 type 为 null 的数据求和赋值给变量 @middle_

4、返回变量 @middle_

返回中间值的和:38998

第六、将以上函数待入使用场景中运用

通过以上几个函数就可以实现这个需求,获取6个月出库数据中最大值,最小值,中间值求和,剩余4个月值的平均值。

程序代码园发文地址:sql server 求多个字段中的最小值和最大值-程序代码园小说,Java,HTML,Java小工具,程序代码园,http://www.byqws.com/ ,sql server 求多个字段中的最小值和最大值http://www.byqws.com/blog/2143.html

相关推荐
皇族崛起31 分钟前
【视觉多模态】- 3D建模尝试 I (广场3D建模,失败)
数据库·人工智能·3d·性能优化
JavaLearnerZGQ33 分钟前
redis笔记大全
数据库·redis·笔记
资生算法程序员_畅想家_剑魔1 小时前
Java常见技术分享-26-事务安全-锁机制-作用与分类
java·开发语言·数据库
Vic101011 小时前
PostgreSQL 中 nextval() 的线程安全性解析
java·数据库·postgresql
写代码的小阿帆2 小时前
Redis缓存健壮性——穿透、雪崩与击穿防护
数据库·redis·缓存
wangqiaowq2 小时前
使用 mysqldump 导出 + mysql 导入
数据库
qq_317620312 小时前
第23章-中级项目练习案例(15个)
数据库·爬虫·web开发·python项目·api开发·python案例
是三好3 小时前
SQL 性能分析及优化
android·数据库·sql
indexsunny3 小时前
互联网大厂Java面试实战:从Spring Boot到微服务的逐步深入
java·数据库·spring boot·微服务·kafka·监控·安全认证
小光学长3 小时前
ssm手工艺品交易平台4xccvou1(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·数据库·spring