当使用DISTINCT时,COUNT (*) OVER()不会返回正确的数字



我有一个类似的问题,但这次我用一个更复杂的查询来描述我的问题…

我只是想知道是否有一个简单的方法来获得一个不同的计数时,选择在Postgresql加入多行查询(我使用限制和偏移分页,但也许它不是太重要,在这种情况下)。

例如,我有这些表

学生表:

学生1 学生二学生三

DISTINCT是在窗口函数之后计算的,因此您必须使用子查询:

SELECT *, COUNT(*) OVER() AS "total_count"
FROM (SELECT DISTINCT student.*
from student
JOIN student_teacher on student_teacher.studentId = student.id
JOIN teacher on student_teacher.teacherId = teacher.id
JOIN teacher_classroom on teacher_classroom.teacherId = teacher.id
JOIN classroom on classroom.id = teacher_classroom.classroomId
) AS subq
LIMIT 10 OFFSET 0;

将内连接和DISTINCT转化为一系列EXISTS条件会更有效。

最新更新