SQL查询以选择每个组的百分比

时间:2016-01-05 19:29:48

标签: sql database group-by teradata

我有一张名为Grades的表,其中包含每年的结果 我想选择每年得分超过70%的学生百分比 像例如对于2012年,100个中的40个获得了70%以上。所以2012年的百分比是40%。
我在子查询中做到了,但我想知道是否可以不使用子查询。
我正在使用Teradata Version 6,它支持所有基本的SQL查询 我的表架构是。

Table name: Grades<br>
Columns: Name, Marks, Year.

我能做的最好的事情是:

select (count(marks)/count(*))*100.0
from Grades
where marks > 70
Group by year;

2 个答案:

答案 0 :(得分:4)

您可以使用条件聚合来获取标记的行数&gt; 70.然后将其除以表中的总行数。

select 100.0 * sum(case when marks > 70 then 1 else 0 end)/count(*) 
from Grades

如果您需要每年的百分比,您应该group by年份列。

select year, 100.0 * sum(case when marks > 70 then 1 else 0 end)/count(*) 
from Grades
group by year

答案 1 :(得分:2)

您可以一步完成平均值。如果您想要一个0到100之间的值:

select year,
       avg(case when marks > 70 then 100.0 else 0.0 end) as percentOver79
from Grades
group by year;