现在有这样一张表,比如叫 sukuID    Bm       Name    Value1   Value2   RQ           type    
1     4110     地区1    11.0     13.8   2009-03-06    分类1
2     4111     地区2    211.9    19.3   2009-04-09    分类2
3     4115     地区3    56.8     25.6   2009-10-23    分类3
4     4117     地区4    12.3     78.9   2009-11-01    分类1
5     4110     地区1    15.1     66.6   2009-08-09    分类3
.
.表中的bm和Name可以唯一确定一个分类,现在想通过查询得到以下结果,如何做,要效率高一点。
              (地区名称)Name     (值)Value
分类1  最多  
       最少
       平均值
分类2  最多
       最少
       平均值即统计每个分类的最大最小值,以及这个最大最小值是对应哪个地区的?求达人帮助,谢谢。  

解决方案 »

  1.   


    SELECT type,MAX(Value1) minv,MIN(Value1) maxv,AVG(Value1) avgv
    FROM suku 
    GROUP BY Bm,Name
    ORDER BY type;
      

  2.   

    数据库无所谓哦。oracle,mysql都可以啊。
    问题补充: 刚才漏打了几个字 
                      (地区名称)Name    (值)Value1    (值)Value2 
    分类1    最多  
              最少 
              平均值 
    分类2    最多 
              最少 
              平均值 
    就是对每个value都这么计算统计
      

  3.   

    1楼的group by里面的 Bm 改成 type就行了
      

  4.   

    1楼的选不出来对应的最多的那一条记录的name值啦
      

  5.   

    你的最多和最少指的是value1还是value2呀,还试value1+value2呀?
      

  6.   

    希望的结果应该是这样,再解释一下
                      (地区名称)Name    (值)Value1    (值)Value2 
    分类1    最多     地区4                12.3         78.9
              最少     地区1                11.0         13.8
              平均值   
    分类2    最多      地区2                211.9        19.3          
              最少      地区2                211.9        19.3
              平均值    
      

  7.   

    哦,最多最少这个可能设计的不太合理,应该这样更合理
                                 Value1                        Value2 
                       (地区名称)Name    (值)Value1       (地区名称)Name     (值)Value2 
    分类1     最多         地区4                12.3       地区4               78.9 
              最少        地区1                11.0        地区2               13.8 
              平均值  
    分类2     最多         地区2                211.9       地区3               19.3
              最少        地区2                211.9        地区4              19.3 
              平均值    
      

  8.   

    希望的结果应该是这样,再解释一下,平均值可以暂时不考虑ID    Bm      Name    Value1  Value2  RQ          type    
    1    4110    地区1    11.0    13.8  2009-03-06    分类1 
    2    4111    地区2    211.9    19.3  2009-04-09    分类2 
    3    4115    地区3    56.8    25.6  2009-10-23    分类3 
    4    4117    地区4    12.3    78.9  2009-11-01    分类1 
    5    4110    地区1    15.1    66.6  2009-08-09    分类3 

    . 基于以上的数据,结果应该是这样的                        Value1                  Value2
                       Name       Value         Name      Value
    分类1   最多       地区4       12.3         地区4      78.9
            最少       地区1       11.0         地区1      13.8
            平均值分类2   最多       地区2       211.9        地区2      19.3
           最少        地区2       211.9        地区2      19.3
           平均值分类3   最多       地区3      56.8         地区1       66.6
            最少        地区1      15.1         地区3       25.6
      

  9.   

    就是说 :
            分类=分类1,valuename=value1,的最大值及最大值对应的地区
      

  10.   

    应该group by type,你value1和value2分别代表什么意思?
      

  11.   

    楼主,你肯定得先goup by type把最大最小值找出来,然后用这个值作为条件再去连接这个表。
    而且你求最大最小值的sql必须分开来写。
    具体的,你没说清楚,写起来也费时间,我就只说说思路了。
      

  12.   

    没有明白你value2用处是什么.
    create table  suku
    (
       id int not null,
       bm varchar(10),
       [name] varchar(10),
       value1 decimal(12,1),
       value2 decimal(12,1),
       rq datetime,
       [type] varchar(10)   
    )
    insert into suku(id,
       bm,
       [name],
       value1,
       value2,
       rq,
       [type])  
    select 1,'4110','地区1',11.0,13.8,'2009-03-06','分类1'
    union
    select  2,'4111','地区2',211.9,19.3,'2009-04-09','分类2'
    union   
    select 3,'4115','地区3',56.8,25.6,'2009-10-23','分类3'
    union   
    select 4,'4117','地区4',12.3,78.9,'2009-11-01','分类1'
    union 
    select 5,'4110','地区1',15.1,66.6,'2009-08-09','分类3'
    SELECT type,MAX(Value1) minv,MIN(Value1) maxv
    FROM suku 
    GROUP BY type
    这样最简单的获取value1的最大最小