sql sum求和 值小于不显示_sql查询语句问题- sum求和的值作为查询条件

在物流系统开发过程中碰到这样一个问题,项目组的人讨论了很久用了这样的解决方法,

肯定还有地方需要优化,我先把我们的思路写出来,哪位朋友比较感兴趣,帮忙优化一下。

某储位档是已经按照优先级别排序的集合,字段有[储位代码(locationcode),储位产品存放数量(pilenum),优先级(level)]

现在要从该表中按照排好的顺序取出150个产品。如何最简单实现?

创建测试资料文件某储位档(test1)

the following is our sql script:

select identity(int,1,1) as rID,* into #test from test1

select * from #test

if not exists(select * from #test a where (select sum(pilenum) from #test where rID <= a.rID) <90)

begin

select top 1 * from #test

end

else

begin

select * from #test a where (select sum(pilenum) from #test where rID <= a.rID) < 90

union (select * from #test where rID = (select max(rID) from #test a where (select sum(pilenum) from #test where rID <= a.rID) < 90)+1)

end

drop table #test

executed result:

rID

locationcode

pilenum

level

1

T-E03-2

34

1

2

T-E03-3

50

1

3

T-E03-6

50

1

4

T-E03-7

12

1

5

T-E03-8

80

2

6

T-E04-5

30

3

7

T-E04-7

50

2rID

locationcode

pilenum

level

1

T-E03-2

34

1

2

T-E03-3

50

1

3

T-E03-6

50

1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,MySQL 5.0.3版本之后,可以计算 decimal 类型的精确 sum 了。在之前的版本中,如果对 decimal 类型的列进行 sum 操作,结果会被截断为整数。但是在 5.0.3 之后,MySQL 支持了 DECIMAL 类型的 SUM 函数,可以返回精确的结果。使用方法如下: ``` SELECT SUM(column_name) FROM table_name; ``` 其中,column_name 是要求和的列名,table_name 是表名。 需要注意的是,在进行 DECIMAL 类型的计算时,需要使用正确的精度和标度,否则可能会导致计算结果不准确。可以使用 DECIMAL(p,s) 定义列的精度和标度,其中 p 表示精度(即总位数),s 表示标度(即小数位数)。例如,DECIMAL(10,2) 表示精度为 10,小数位数为 2 的 DECIMAL 类型。 ### 回答2: 在MySQL 5.03之前,对于DECIMAL类型的字段进行求和操作时会存在精度丢失的问题。这是由于DECIMAL类型存储的是浮点数的固定精度表示,但在计算过程中会转换为浮点数进行运算,从而导致精度损失。 但在MySQL 5.03以后的版本,MySQL引入了新的聚合函数——SUM()函数的修正版本,该函数被设计为可处理DECIMAL类型的字段,从而解决了之前的精度问题。通过使用这个修正版本的SUM()函数,可以准确地对DECIMAL类型的字段进行求和操作,而不会发生精度丢失。 使用修正版本的SUM()函数进行求和操作时,会根据DECIMAL类型字段的精度和标度进行精确计算,确保结果的精度不会受到丢失。这样可以保证在进行SUM()函数计算时,原始数据的精确度得到保留,计算结果也能保持准确。 总之,MySQL 5.03以后的版本能够准确计算DECIMAL类型字段的求和,通过使用修正版本的SUM()函数,可以避免精度损失的问题。这一改进为开发人员在处理DECIMAL类型的字段时提供了更加可靠和准确的数据计算方式。 ### 回答3: 在MySQL 5.03版本之前,使用SUM函数对DECIMAL类型的字段进行求和时,可能会出现计算结果不精确的问题。这是因为在早期版本中,DECIMAL类型的字段是按照浮点数进行计算,而浮点数本身就存在精度问题。 然而,在MySQL 5.03及以后的版本中,引入了一个名为"exact"的修饰符。使用该修饰符,可以确保DECIMAL字段的精确性,从而得到准确的求和结果。修饰符的语法如下: SUM(field_name) [EXACT] 在实际使用中,如果想要对DECIMAL类型的字段进行精确求和,只需在SUM函数中添加"EXACT"修饰符即可。 例如,假设有一个表格名为"orders",其中有一个DECIMAL类型的字段"amount",我们希望对"amount"字段进行求和并确保精确性,可以使用以下的SQL语句: SELECT SUM(amount) EXACT FROM orders; 这样可以得到一个精确的求和结果。 总结起来,MySQL 5.03版本以后,可以使用修饰符"EXACT"来确保对DECIMAL类型字段的精确求和。这个修饰符在计算DECIMAL字段的SUM时非常有用,可以避免计算结果的不准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值