我在做一个任务的时候确实遇到了一个问题,因为我的除法值在单独使用的时候和在完整代码中使用的时候是不一样的。比方说我做这段代码。
SELECT (count(paimta))::numeric / count(distinct paimta) as average
FROM Stud.Egzempliorius;
最后我得到的数字是2. (6)7, 但是当我把它用在完整的代码中时:
SELECT Stud.Egzempliorius.Paimta, COUNT(PAIMTA) as PaimtaKnyga
FROM Stud.Skaitytojas, Stud.Egzempliorius
WHERE Stud.Skaitytojas.Nr=Stud.Egzempliorius.Skaitytojas
GROUP BY Stud.Egzempliorius.Paimta
HAVING count(paimta) > (count(paimta))::numeric / count(distinct paimta);
它的值就会改变 因为除法不再起作用了,比如说... ...
HAVING count(paimta) > (count(paimta))::numeric / count(distinct paimta);
我的代码变成了
HAVING count(paimta) > (count(paimta))::numeric;
而这些值是相等的,所以我无法得到最终的答案。这是我使用的数据库 https:/klevas.mif.vu.lt~baronasdbvsbiblioshow-table.php?table=Stud.Egzempliorius。
我挣扎了10个小时,最后我失去了耐心... 所以,我的问题是我要怎么做才能让这段代码。
SELECT (count(paimta))::numeric / count(distinct paimta) as average
FROM Stud.Egzempliorius;
值在完整的代码中不会改变?
想象一下它是如何变化的 照片
你的解决方案失败了,因为这两个查询对不同的行组进行操作。第一个查询是对整个数据集进行计算,而第二个查询则是按以下方式分组的 paimta
.
一种选择是使用窗口函数,但就目前而言,Postgres不支持 count(distinct)
作为一个窗口函数。
我认为最简单的方法是使用一个子查询。
select e.paimta, count(paimta) as paimtaknyga
from stud.skaitytojas s
inner join stud.egzempliorius e on s.nr = e.skaitytojas
group by e.paimta
having count(paimta) > (
select (count(paimta))::numeric / count(distinct paimta) from stud.egzempliorius
)