在另一个查询中使用一个查询的结果

时间:2018-09-09 06:20:25

标签: sql postgresql group-by aggregate-functions

我对Postgresql非常陌生。我有一张看起来像这样的桌子

NAME GPA SUBJECT
BEN 3.5 MATH
BEN 3.7 BIOLOGY
KATE 3.7 MATH
KATE 3.7 BIOLOGY

一个查询为我提供了所有科目的每个人的平均gpa。

select avg(gpa) from table;

结果:

AVGALLGPA
3.8

另一个查询给出每个人的平均gpa。

select avg(gpa) from table group by name;

结果:

NAME AVGGPA
BEN 3.78
KATE 3.83

现在我正在编写一个查询,该查询计算出有多少学生的平均水平好于总体平均水平。

select 
    count(case when avg(gpa)> avgallgpa then 1 
          else null end) 
from table;

如何将前一个查询的结果(avgallgpa)传递到后一个查询?

2 个答案:

答案 0 :(得分:1)

 select count(*) from (
    select name from the_table 
    group by name
    having avg(gpa) > (select avg(gpa) from the_table )
) t

答案 1 :(得分:0)

您可以使用子查询。

select COUNT(*) from table 
group by name having 
avg(gpa) > (select avg(gpa) from table);