怎样将一张表中的数据求和后插入到另一张表中

cuitaxuexunmei 2010-09-07 12:09:47
有一张基础数据表tab1,里面的字段很多,只列举有用的字段,
设备编号(dev_num),
统计码(statistical_code),
管理员号(admin_num),
统计日期(statistical_date),以天计算
交易金额(trade_money)
一天同一个设备号、统计码、管理员,发生交易很多次,交易金额不同,想要把同一个设备号、统计码号、管理员,一天发生的次数和金额总和记录到另一张表中tab2,
设备编号(dev_num),
统计码(statistical_code),
管理员号(admin_num),
统计日期(statistical_date),以天计算
交易金额总和(trade_sum)
交易次数(trade_times),
假设设备号有1000个,统计码有100个,请问怎么做呢,用一个sql语句很难实现,用存储过程怎么做或其他的方法,请高手指点。
...全文
1015 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
恩,我也倾向于第一种,谢谢
wwwwb 2010-09-07
  • 打赏
  • 举报
回复
一般来讲,主键应该有意义,就你的情况,建议用第1种表设计
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
一个设备做很多业务,每个业务用不同的统计码表示,所以设备编号是重复的
wwwwb 2010-09-07
  • 打赏
  • 举报
回复
表应该有主键,以唯一确定一条记录,用设备编号做主键不行?
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
对了,还有一个问题
CREATE TABLE day_settlement_table(
settlement_id int key primary key auto_increment, // 无意义主键
dev_num varchar(15) not null, // 设备编号
admin_num varchar(8) not null, // 管理员号
statistical_code varchar(10) not null, // 统计码
trade_times smallint not null, // 统计时间
trade_sum decimal(8,2), // 交易金额总和
statistical_date date not null); // 统计日期

CREATE TABLE day_settlement_table(
dev_num varchar(15) not null, // 设备编号
admin_num varchar(8) not null, // 管理员号
statistical_code varchar(10) not null, // 统计码
trade_times smallint not null, // 统计时间
trade_sum decimal(8,2), // 交易金额总和
statistical_date date not null); // 统计日期

这两个表的区别是第一个表比第二个表多了无意义的主键,这两个表哪一个更好,请指教
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
我知道了
insert into day_settlement_table (dev_num,admin_num,statistical_code,trad
e_times,trade_sum,statistical_date) select dev_num,admin_num,statistical_code,co
unt(*),sum(trade_money),statistical_time from business_monitor_table where DATE(statistical_time)='2010-09-07' group by de
v_num,statistical_code,admin_num,statistical_time;

问题已解决
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
insert into day_settlement_table (dev_num,admin_num,statistical_code,trad
e_times,trade_sum,statistical_date) select dev_num,admin_num,statistical_code,co
unt(*),sum(trade_money),statistical_time from business_monitor_table group by de
v_num,statistical_code,admin_num,statistical_time;

我要加上统计时间 where DATE(statistical_time)='2010-09-07',应该加在什么地方
wwwwb 2010-09-07
  • 打赏
  • 举报
回复
贴生成记录的INSERT语句及要求结果
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
对问题的补充:
我把表的一些约束去掉了,只贴上基本字段。
CREATE TABLE if not exists business_monitor_table(
dev_num varchar(15) not null, // 设备编号
statistical_code varchar(10) not null, // 统计码
response_code varchar(8) not null, // 应答码
out_account varchar(25), // 出款方账户
transit_account varchar(25), // 中转账户
in_account varchar(25), // 入款方账户
trade_money decimal(7,2), // 交易金额
admin_account varchar(25), // 管理员账号
trade_time datetime not null, // 交易时间
statistical_time datetime not null, // 统计时间
currency_code varchar(3) not null, // 货币代码
accept_bank_code varchar(20), // 受理行机构代码
accept_bank_inf varchar(20), // 受理行信息
sendout_bank_code varchar(20), // 发卡行机构代码
admin_num varchar(8) not null, // 管理员号
card_type varchar(3)); // 卡种类型

CREATE TABLE day_settlement_table(
settlement_id int key primary key auto_increment, // 无意义主键
dev_num varchar(15) not null, // 设备编号
admin_num varchar(8) not null, // 管理员号
statistical_code varchar(10) not null, // 统计码
trade_times smallint not null, // 统计时间
trade_sum decimal(8,2), // 交易金额总和
statistical_date date not null); // 统计日期

把business_monitor_table表中的数据进行计算后插入到day_settlement_table表中,主要是计算金额总和和交易次数。
cuitaxuexunmei 2010-09-07
  • 打赏
  • 举报
回复
感谢ACMAIN_CHM给我的帮助和建议,我会改正,主要是因为基础数据表的字段比较多,显得太乱,所以我没贴出来。
还有你给我的答案,对我启发很大,很有用,已经满足我一半的要求了,就是交易次数怎么计算呢
ACMAIN_CHM 2010-09-07
  • 打赏
  • 举报
回复

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

ACMAIN_CHM 2010-09-07
  • 打赏
  • 举报
回复
insert into 另一张表中tab2 (设备编号,统计码,管理员号,统计日期,交易金额) select 设备编号,统计码,管理员号,统计日期,sum(交易金额) from 基础数据表tab1 group by 设备编号,统计码,管理员号,统计日期

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧