脑子比较乱一时想不过来该怎么办.............表A
time-------------type------------name
2010-01-01-------A---------------阿里郎
2010-01-01-------A---------------阿里山
2010-01-01-------B---------------的姑娘
2010-01-01-------C---------------真漂亮
2010-01-02-------A---------------卡卡西
2010-01-02-------C---------------榻榻米表B
time-------------------------name-----------num----------avg_num
2010-01-01------------------阿里郎----------5------------5.5
2010-01-01------------------阿里山----------6------------5.5
2010-01-01------------------的姑娘----------7------------7
2010-01-01------------------真漂亮----------9------------9
2010-01-02------------------卡卡西----------5------------5
2010-01-02------------------榻榻米----------1------------1表B avg_NUM 需要后期计算更新的,计算公式是:
【2010-01-01】 这一天的 【TYPE A】 下的 【name】 的 【num】 值总和 / 【2010-01-01】 这一天的【TYPE A】下所有【name】总数【】的部分表示实际SQL中这些值都没有参数传进来的
实际目前表B avg_num字段是没有值的,就这两张表,用这计算公式思路把表B给更新下
可以一个SQL 也可以借助临时表再SQL,反正随便了.......
time-------------type------------name
2010-01-01-------A---------------阿里郎
2010-01-01-------A---------------阿里山
2010-01-01-------B---------------的姑娘
2010-01-01-------C---------------真漂亮
2010-01-02-------A---------------卡卡西
2010-01-02-------C---------------榻榻米表B
time-------------------------name-----------num----------avg_num
2010-01-01------------------阿里郎----------5------------5.5
2010-01-01------------------阿里山----------6------------5.5
2010-01-01------------------的姑娘----------7------------7
2010-01-01------------------真漂亮----------9------------9
2010-01-02------------------卡卡西----------5------------5
2010-01-02------------------榻榻米----------1------------1表B avg_NUM 需要后期计算更新的,计算公式是:
【2010-01-01】 这一天的 【TYPE A】 下的 【name】 的 【num】 值总和 / 【2010-01-01】 这一天的【TYPE A】下所有【name】总数【】的部分表示实际SQL中这些值都没有参数传进来的
实际目前表B avg_num字段是没有值的,就这两张表,用这计算公式思路把表B给更新下
可以一个SQL 也可以借助临时表再SQL,反正随便了.......
临时表结构基本如下
time----------type----------name---------num
贴出你的 INSERT INTO 有测试数据,大家都会愿意帮忙一些。
(
timeinfo date,
type vchar(2),
name vchar(20)
)insert into tb_type
(time,type,name)
values
(2010-01-01,A,阿里郎)
(2010-01-01,A,阿里山)
(2010-01-01,B,的姑娘)
(2010-01-01,C,真漂亮)
(2010-01-02,A,卡卡西)
(2010-01-02,C,榻榻米)
create table tb_name
(
time date,
name vchar(20),
num number,
avg_n number
)
insert into tb_name
(time,name,num)
values
(2010-01-01,阿里郎,5)
(2010-01-01,阿里山,6)
(2010-01-01,的姑娘,7)
(2010-01-01,真漂亮,9)
(2010-01-02,卡卡西,5)
(2010-01-02,榻榻米,1)
inner join (
select a.type,a.time,avg(num) as avg_num
from 表A a inner join 表B b on a.name=b.name and a.time=b.time
group by a.type,a.time
) t3 on t3.name=t2.type and t1.time=t3.time
set t1.avg_num=t3.avg_num
SELECT SUM(IF(A.TYPE='A',B.NUM,0))/(SELECT COUNT(*) FROM LA WHERE TYPE='A' AND TIME='2010-01-01') AS AV FROM LA A INNER JOIN LB B ON A.NAME=B.NAME
WHERE A.TYPE='A' AND B.time='2010-01-01') C
SET A.avg_num=C.AV
WHERE A.time='2010-01-01' AND A.NAME=B.NAME AND B.TYPE='A';
我说了实际SQL中计算公式中的【】部分是没有参数的
create table tb_type
(
timeinfo date,
type varchar(2),
name varchar(20)
);
insert into tb_type
(timeinfo,type,name)
values
('2010-01-01','A','阿里郎'),
('2010-01-01','A','阿里山'),
('2010-01-01','B','的姑娘'),
('2010-01-01','C','真漂亮'),
('2010-01-02','A','卡卡西'),
('2010-01-02','C','榻榻米')
;
create table tb_name
(
time date,
name varchar(20),
num int,
avg_n numeric(10,2)
);
insert into tb_name
(time,name,num)
values
('2010-01-01','阿里郎',5),
('2010-01-01','阿里山',6),
('2010-01-01','的姑娘',7),
('2010-01-01','真漂亮',9),
('2010-01-02','卡卡西',5),
('2010-01-02','榻榻米',1);
楼主提供的建表语句和测试记录的SQL代码你测试过么?
update tb_name ,(
select t1.timeinfo, t1.names,t2.sumnum/t1.ct as avg_n
from (
select timeinfo,type,group_concat(name) as Names,count(*) as CT from tb_type group by type,timeinfo
) t1 inner join
(select b.type,a.time, sum(num) as SUMNUM from tb_name a inner join tb_type b on a.name =b.name
group by b.type,a.time) t2
where t1.timeinfo=t2.time and t1.type=t2.type ) tmp
set tb_name.avg_n=tmp.avg_n
where tb_name.time=tmp.timeinfo and find_in_set(tb_name.name,tmp.names)