select 体检年度,avg(case when 性别='男' then 身高 end) 男平均身高,avg(case when 性别='女' then 身高 end) 女平均身高  from 表 group by 体检年度

解决方案 »

  1.   

    select 体检年度,cast(avg(case when 性别='男' then 身高+0.0 else 0 end) as numeric(8,1)) 男平均身高,cast(avg(case when 性别='女' then 身高+0.0 else 0 end) as numeric(8,1)) 女平均身高  from 表 group by 体检年度
      

  2.   

    select 体检年度,avg(case when 性别='男' then 身高+1.0 end) 男平均身高,avg(case when 性别='女' then 身高*1.0 end) 女平均身高  from 表 group by 体检年度
      

  3.   

    select 体检年度,avg(case when 性别='男' then 身高*1.0 end) 男平均身高,avg(case when 性别='女' then 身高*1.0 end) 女平均身高  from 表 group by 体检年度
      

  4.   

    TO  pengdali(大力 V2.0):
    感谢您再次回答我的问题。
    但我2点想问您
      1:你为什么不用 IF 而用 CASE  ?
      2: 对于以上的问题 我打算这样写
        
         SELECT 体检年度,
               ( SELECT SUM(身高)/COUNT(性别) WHERE 性别='男' WHRER 体检年度=''--我这里的体检年度 想等于 外面的那个体检年度值,不晓得怎么写 
                GROUP BY 体检年度  ) AS 男平均身高,
               ( SELECT SUM(身高)/COUNT(性别) WHERE 性别='男' WHRER 体检年度=''
                GROUP BY 体检年度 ) AS 女平均身高
         FROM 表  GROUP BY 体检年度     请问,1:我的这个办法能写成功吗? 
              2:我的思路错在那里?
              3:我上面所提到的 内选择值 = 外选择值 该怎样表达?
      

  5.   

    1:你为什么不用 IF 而用 CASE  ?
    select 里不能用if只能用case2: 对于以上的问题 我打算这样写
        avg函数就是求平均,我加0.0是为了有小数,加case是为了精确到1位小数
    你这样写
         SELECT 体检年度,
               ( SELECT SUM(身高)/COUNT(性别) from 表 WHERE 性别='男' WHRER 体检年度=tem.体检年度
                )  男平均身高,
               ( SELECT SUM(身高)/COUNT(性别) from 表 WHERE 性别='女' WHRER 体检年度=tem.体检年度
                )  女平均身高
         FROM 表 tem  GROUP BY 体检年度就可以了,但效率巨慢
      

  6.   

    1:你为什么不用 IF 而用 CASE  ?
    select 里不能用if只能用case2: 对于以上的问题 我打算这样写
        avg函数就是求平均,我加0.0是为了有小数,加case是为了精确到1位小数
    你这样写
         SELECT 体检年度,
               ( SELECT SUM(身高)/COUNT(性别) from 表 WHERE 性别='男' and 体检年度=tem.体检年度
                )  男平均身高,
               ( SELECT SUM(身高)/COUNT(性别) from 表 WHERE 性别='女' and 体检年度=tem.体检年度
                )  女平均身高
         FROM 表 tem  GROUP BY 体检年度就可以了,但效率巨慢
      

  7.   

    TO pengdali(大力 V2.0):
       
       非常感谢你的鼎立支持! 请问 您工作一般使用的 什么 语言(开发工具)+后台数据库 ?
       ^_^
      

  8.   

    select 体检年度,avg(case when 性别='男' then 身高 end) 男平均身高,avg(case when 性别='女' then 身高 end) 女平均身高  from 表 group by 体检年度
      

  9.   

    TO  pengdali(大力 V2.0):
        我感覺該查詢語句有問題,請指教,select 体检年度,cast(avg(case when 性别='男' then 身高+0.0 else 0 end) as numeric(8,1)) 男平均身高,cast(avg(case when 性别='女' then 身高+0.0 else 0 end) as numeric(8,1)) 女平均身高  from 表 group by 体检年度  我認為這樣統計出男(女)平均身高為:男(女)身高之和/男女總人數
                              而不是:男(女)身高之和/男(女)總人數
      

  10.   

    '身高'定義的類型 numeric(7,2)Select A.体检年度,sum(Case when A.性别='男' then A.平均身高 else 0 end) 男平均身高,sum(Case when A.性别='女' then A.平均身高 else 0 end) 女平均身高
    From 
    (Select 体检年度,sum(身高)/count(*) as 平均身高,性别 From Table Group by 体检年度,性别 ) A
    Group by A.体检年度