ID      name     date      version   value
1        A           9月5号  V1          2
2        A           9月5号  V2          3
3        B           9月5号  V2          3
4        B           9月5号  V1          1表是这样的我现在需要写一个SQL 
第一个字段求  name 和 date分组 value均值
第二个字段求   name 和 date  和 version = V1 的value均值
第二个字段求   name 和 date  和 version = V2 的value均值如何写SQL  求大神帮助

解决方案 »

  1.   

    USE test;DROP TABLE
    IF EXISTS `kkk`;create table kkk(
    `ID` smallint not null AUTO_INCREMENT,
    `name` varchar(10) not null,
    `date` varchar(10) not null,
    `version` varchar(10) not null,
    `value` int not null default 0,
    PRIMARY KEY  (`id`)
    ) ENGINE = MyISAM DEFAULT CHARSET = utf8;insert kkk values
    (1, 'A', '9月5号', 'V1', 2),
    (2, 'A', '9月5号', 'V2', 3),
    (3, 'B', '9月5号', 'V2', 3),
    (4, 'B', '9月5号', 'V1', 1),
    (5, 'A', '9月6号', 'V2', 3),
    (6, 'B', '9月6号', 'V2', 3),
    (7, 'B', '9月7号', 'V1', 1);select va, vb, vc, da from (select avg(value) va, date da from kkk group by date) as aaa left join (select avg(value) vb, date db from kkk where version='V1' group by date) as bbb on aaa.da=bbb.db left join (select avg(value) vc, date dc from kkk where version='V2' group by date) as ccc on bbb.db=ccc.dc;drop table kkk;
      

  2.   

    SELECT  name ,
            date ,
            AVG(value) AS avgvalue ,
            SUM(CASE WHEN version = 'V1' THEN value
                     ELSE 0
                END) / SUM(CASE WHEN version = 'V1' THEN 1
                                ELSE 0
                           END) AS v1avg ,
            SUM(CASE WHEN version = 'V2' THEN value
                     ELSE 0
                END) / SUM(CASE WHEN version = 'V2' THEN 1
                                ELSE 0
                           END) AS v2avg
    FROM    表
    GROUP BY name ,
            date
      

  3.   

    SELECT name,date,
           AVG(value) AS avgvalue ,
           AVG(CASE WHEN version = 'V1' THEN value END)  AS avgV1 ,
           AVG(CASE WHEN version = 'V2' THEN value END) AS avgV2
    FROM
    表名
    GROUP BY
    name,date
      

  4.   

    结帖率:0%
       
    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://bbs.csdn.net/help#post_dispose
      

  5.   

    楼主是要的如下数据吗?
    name     date      version   avgvalue1   avgvalue2
    A           9月5号  V1          2
    A           9月5号  V2          3
    A           9月5号  v3           1
    A           9月5号                                         2
    B           9月5号  V2          3
    B           9月5号  V1          1
    B           9月5号                                        2
    这是两个分组语句union后的结果
    第一个语句:
    select concat_ws('-',name,date,version) as unionfields,avg(value) as avgv1, 0 as avgv2
    from tname group by name,date,version
    产生的结果如下:
    unionfields          avgv1  avgv2
    A-9月5号-V1          2         0
    A-9月5号-V2          3         0
    A-9月5号-v3           1         0
    B-9月5号-V2          3         0
    B-9月5号-V1          1         0
    第二个语句:
    select concat_ws('-',name,date) as unionfields,0 as avgv1, Avg(value) as avgv2
    from tname group by name,date
    产生的结果如下:
    unionfields     avgv1  avgv2
    A-9月5号            0        2
    B-9月5号            0        2
    联合两个结果集:
    中间用union all 
    select concat_ws('-',name,date,version) as unionfields,avg(value) as avgv1, 0 as avgv2
    from tname group by name,date,version
    Union all
    select concat_ws('-',name,date) as unionfields,0 as avgv1, Avg(value) as avgv2
    from tname group by name,date order by unionfields desc
    结果集如下:
    unionfields          avgv1  avgv2
    A-9月5号-V1          2         0
    A-9月5号-V2          3         0
    A-9月5号-v3           1         0
    A-9月5号                0        2
    B-9月5号-V2          3         0
    B-9月5号-V1          1         0
    B-9月5号                0        2
    可以用''替代0