SQL 查询每个组的 select 百分比
SQL query to select percentage per Group
我有一个名为 Grades 的 table,其中包含每年的结果。
我想 select 每年得分超过 70% 的学生百分比。
像例如对于 2012 年,100 人中有 40 人的得分超过 70%。所以 2012 年的百分比是 40%。
我是在子查询中完成的,但我想知道是否可以不使用子查询。
我使用的是 Teradata 版本 6,它支持所有基本 sql 查询。
我的 table 架构是。
Table name: Grades<br>
Columns: Name, Marks, Year.
我能做的最好的是:
select (count(marks)/count(*))*100.0
from Grades
where marks > 70
Group by year;
您可以使用条件聚合来获取标记 > 70 的行数。然后将其除以 table 中的总行数。
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
您可以通过平均值一步完成此操作。如果你想要一个从 0 到 100 的值:
select year,
avg(case when marks > 70 then 100.0 else 0.0 end) as percentOver79
from Grades
group by year;
我有一个名为 Grades 的 table,其中包含每年的结果。
我想 select 每年得分超过 70% 的学生百分比。
像例如对于 2012 年,100 人中有 40 人的得分超过 70%。所以 2012 年的百分比是 40%。
我是在子查询中完成的,但我想知道是否可以不使用子查询。
我使用的是 Teradata 版本 6,它支持所有基本 sql 查询。
我的 table 架构是。
Table name: Grades<br>
Columns: Name, Marks, Year.
我能做的最好的是:
select (count(marks)/count(*))*100.0
from Grades
where marks > 70
Group by year;
您可以使用条件聚合来获取标记 > 70 的行数。然后将其除以 table 中的总行数。
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
您可以通过平均值一步完成此操作。如果你想要一个从 0 到 100 的值:
select year,
avg(case when marks > 70 then 100.0 else 0.0 end) as percentOver79
from Grades
group by year;