【发布时间】:2021-02-25 22:00:51
【问题描述】:
我有一张表,上面有一些用户的姓名和成绩
CREATE TABLE grades (name varchar(100), grade integer);
insert into grades
values
('Bob', 12),
('Bob', 13),
('Bob', 23),
('Bob', 17),
('James', 15),
('James', 27),
('Nick ', 18),
('Nick ', 16),
('Nick ', 22),
('Nick ', 32),
('Nick ', 19);
我想要一个按名称分组的输出表,以及每个名称的平均成绩和第 n 个最低值。
我尝试使用窗口函数nth_value(),但尝试执行查询时出现错误(此处为 n = 2)
select name, avg(grade), nth_value(grade, 2) over(partition by name
order by grade
Range BETWEEN
UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING)
from grades group by name;
错误、警告:
42803:列“grades.grade”必须出现在 GROUP BY 子句中或用于聚合函数中
编写这样一个查询的正确方法是什么?
【问题讨论】:
标签: sql postgresql average aggregate-functions greatest-n-per-group