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 体检年度
select 体检年度,avg(case when 性别='男' then 身高+1.0 end) 男平均身高,avg(case when 性别='女' then 身高*1.0 end) 女平均身高 from 表 group by 体检年度
select 体检年度,avg(case when 性别='男' then 身高*1.0 end) 男平均身高,avg(case when 性别='女' then 身高*1.0 end) 女平均身高 from 表 group by 体检年度
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:我上面所提到的 内选择值 = 外选择值 该怎样表达?
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 体检年度就可以了,但效率巨慢
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 体检年度就可以了,但效率巨慢
TO pengdali(大力 V2.0):
非常感谢你的鼎立支持! 请问 您工作一般使用的 什么 语言(开发工具)+后台数据库 ? ^_^
select 体检年度,avg(case when 性别='男' then 身高 end) 男平均身高,avg(case when 性别='女' then 身高 end) 女平均身高 from 表 group by 体检年度
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 体检年度 我認為這樣統計出男(女)平均身高為:男(女)身高之和/男女總人數 而不是:男(女)身高之和/男(女)總人數
'身高'定義的類型 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.体检年度
感谢您再次回答我的问题。
但我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:我上面所提到的 内选择值 = 外选择值 该怎样表达?
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 体检年度就可以了,但效率巨慢
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 体检年度就可以了,但效率巨慢
非常感谢你的鼎立支持! 请问 您工作一般使用的 什么 语言(开发工具)+后台数据库 ?
^_^
我感覺該查詢語句有問題,請指教,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 体检年度 我認為這樣統計出男(女)平均身高為:男(女)身高之和/男女總人數
而不是:男(女)身高之和/男(女)總人數
From
(Select 体检年度,sum(身高)/count(*) as 平均身高,性别 From Table Group by 体检年度,性别 ) A
Group by A.体检年度