VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 601|回复: 3

求一个单条记录有最高限额的统计语句

[复制链接]

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-24 16:40:02 | 显示全部楼层 |阅读模式
表的结构很简单
C_name,C_no,C_amnt,分别为姓名、流水号、金额
内容例如:
A,1,120.00
A,2,150.00
A,3,400,00
A,4,240.00
B,5,730.00
B.6.280.00
C,7,30.00

要求是这样的,每条记录C_amnt>=300的,按300计,然后group by C_name,得到它的sum(C_amnt)和重记后的sum(C_amnt)

这个主要是用在抽奖上面,每100元有一次抽奖的机会,每件商品最高限三次机会,余额可以累计为一次机会,如上面的数据:应该输出为:
A,910.00,8    ---8=int((120+150+300+240)/100)
B,1010.00,5   ---5=int((300+280)/100)
C,30.00,0     ---0=int(30/100)

想了好长时间,就是算不出来应该怎么写条件,因为原来的表是正式服务器上的数据,我没办法在上面加一个字段再update出每条的最高值,建一个临时表可行吗?因为那张表的数据有近300万条(从开业以来的所有流水)。如果可以用语句搞定是最好的了,呵呵。

先谢谢各位了。
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-2-13 12:45:02 | 显示全部楼层
select C_name, C_amnt=sum(C_amnt), 次数=cast(sum(case when C_amnt>=300 then 300.00 else C_amnt end/100) as int) from T group by C_name
回复

使用道具 举报

0

主题

211

帖子

108.00

积分

新手上路

Rank: 1

积分
108.00
发表于 2020-2-13 13:30:01 | 显示全部楼层
create table T(C_name char(1),C_no int,C_amnt decimal(10, 2))

insert T select 'A', 1, 120.00
union all select 'A', 2, 150.00
union all select 'A', 3, 400.00
union all select 'A', 4, 240.00
union all select 'B', 5, 730.00
union all select 'B', 6, 280.00
union all select 'C', 7, 30.00

select C_name, C_amnt=sum(C_amnt),
次数=cast(sum(case when C_amnt>=300 then 300.00 else C_amnt end/100) as int)
from T group by C_name

--result
C_name C_amnt                                   次数         
------ ---------------------------------------- -----------
A      910.00                                   8
B      1010.00                                  5
C      30.00                                    0

(3 row(s) affected)

回复

使用道具 举报

1

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-2-13 18:00:02 | 显示全部楼层
十分感谢楼上的帮助,看来SQL我要学习的地方还多呀…………
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表