脑子比较乱一时想不过来该怎么办.............表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,反正随便了.......

解决方案 »

  1.   

    目前我想的一个方法是借助临时表实现
    临时表结构基本如下
    time----------type----------name---------num
      

  2.   

    贴出你的 SHOW CREATE TABLE
    贴出你的 INSERT INTO 有测试数据,大家都会愿意帮忙一些。
      

  3.   

    两台电脑  之间有限制   贴不了呀  >.<
      

  4.   

    create table tb_type
    (
    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)
      

  5.   

    没测试数据,自己试试吧。不保证正确。update 表B t1 inner join 表A t2 on t1.name=t2.name and t1.time=t2.time
    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
      

  6.   

    UPDATE LB A,LA B ,(
    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';
      

  7.   

    LS
    我说了实际SQL中计算公式中的【】部分是没有参数的
      

  8.   

    用字符串累加生成SQL语句再执行
      

  9.   


    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代码你测试过么?
      

  10.   


    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)