当我在www.example.com上练习SQL时,我遇到了一个在特定行上没有意义的解决方案.你可以在下面的链接中看到这个问题:
https://pgexercises.com/questions/aggregates/rankmembers.html个
解决方案查询如下所示,它工作,但我不能真正理解它如何不会引发错误,由于错误的GROUP BY用法:
select firstname, surname, hours, rank() over (order by hours desc) from
(select firstname, surname,
((sum(bks.slots)+10)/20)*10 as hours
from cd.bookings bks
inner join cd.members mems
on bks.memid = mems.memid
group by mems.memid
) as subq
order by rank, surname, firstname;
没有代表我点击的是:为什么在GROUP BY中不包括名字和姓氏会导致错误?据我所知,GROUP BY必须包括我们显示的所有非聚合列才能工作.这是因为我们通过唯一标识每一列的主键JOIN,从而不知何故否定了在GROUP BY语句中包含显示列的必要性吗?