разделение графов не работает в полном коде - PullRequest
2 голосов
/ 24 апреля 2020

У меня действительно есть проблема с задачей, потому что мое значение деления отличается, когда я использую его отдельно и когда я использую его в полном коде. Допустим, я делаю этот код:

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/~baronas/dbvs/biblio/show-table.php?table=Stud.Egzempliorius

Я боролся за 10 часов и, наконец, я потерял терпение ... Итак, мой вопрос заключается в том, что я должен сделать с этим кодом :

SELECT (count(paimta))::numeric / count(distinct paimta) as average
FROM Stud.Egzempliorius;

значение не изменяется в полном коде?

Изображение, как оно меняется Фото

1 Ответ

2 голосов
/ 24 апреля 2020

Ваше решение не удалось, потому что два запроса работают с разными группами строк. Первый запрос выполняет вычисления по всему набору данных, в то время как второй группирует по paimta.

. Один вариант - использовать оконные функции, но в отношении Postgres не поддерживается * 1004. * как оконная функция.

Я думаю, что самый простой подход - это использовать подзапрос:

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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...