2014-02-17 26 views
0

我有一个表如下:取平均在SQL存储过程的多个列

Age Gender Shoesize 
1 Male 121 
2 Female 130 
2 Female 138 
2 m 147 
2 Male 130 
2 Male 138 
3 Female 130 
3 Female 138 
3 Female 147 
3 Female 155 
3 Female 164 
3 Female 172 
3 Male 130 
3 Male 138 
3 Male 147 
3 Male 155 
3 Male 164 
3 Male 172 
3 Male 181 
3 Male 189 
4 f 147 
4 f 155 
4 f 164 
4 f 172 
4 f 181 
4 F 281 
4 Female 138 
4 Female 147 
4 Female 155 
4 Female 164 
4 Female 172 
4 Female 181 
4 Female 189 
4 Female 197 
4 m 130 
4 m 147 
4 m 155 
4 m 164 
4 m 172 
4 m 181 
4 Male 121 
4 Male 147 
4 Male 155 
4 Male 164 
4 Male 172 

我想显示例如用于所有年龄= 1,平均鞋的大小为男性该特定鞋的尺寸在女性的情况下也是如此。

 Males   Females 
Age ShoeSize(Avg) ShoeSize(Avg) 

请帮助我是新来SQL

Select Age, ChildGender, Shoesize, AVG(Shoesize) from [dbo].[Transaction] 

GROUP BY Age , ChildGender, Shoesize 

编辑:

使这个我如何结合这两个查询

Select AVG(Shoesize) AS AverageShoeSizeMale, Age from [dbo].[Transaction] where ChildGender = 'm' or ChildGender = 'male' Group by Age ORDER BY Age DESC 



Select AVG(Shoesize) AS AverageShoeSizeFemale, Age from [dbo].[Transaction] where ChildGender = 'f' or ChildGender = 'female' Group by Age ORDER BY Age DESC 

回答

1

这个问题的答案你任务可以如下:

select age, 
     (select avg(ShoeSize) from [table] t2 where t2.age = t1.age and t2.Gender='Male') as avg_male, 
     (select avg(ShoeSize) from [table] t2 where t2.age = t1.age and t2.Gender='Female') as avg_female 
from [table] t1 
group by ide 

但是,我不会推荐使用子查询。我不确定在这类任务中是否有可能避免它们。

更好的办法是让数据,并从简单的表格利用它们:

select age, Gender, AVG(ShoeSize) 
from [table] 
group by age, Gender 
order by age 
+0

嗨感谢这么多我怎么拿avg_male和avg_female的平均列? – vini

+0

“平均avg_male和avg_female”是什么意思?他们已经包含按年龄和性别分组的平均数据。顺便说一下,我认为sureshhh的答案比我的好得多:) – Starina

+0

嗨,我也想取两列的平均值,并显示它在第三列= avg_total – vini

0

试试这个..

SELECT AGE , MALE,FEMALE,,(MALE+FEMALE)/CAST(2 AS DECIMAL(5,3)) [AVG] 
from [dbo].[Transaction] PIVOT (AVG(Shoesize) FOR GENDER IN (male,female)) AS PVT 
ORDER BY AGE