【发布时间】:2021-08-30 17:49:22
【问题描述】:
我只是想知道在选择连接的多行查询并在 postgresql 中使用限制和偏移作为分页时是否有一种简单的方法来获得不同的计数。
例如,我有 3 个表,学生、教师以及学生和教师之间的关系表。
学生桌:
| id | name |
|---|---|
| 1 | Student1 |
| 2 | Student2 |
| 3 | Student3 |
| 4 | Student4 |
| 5 | Student5 |
| 6 | Student6 |
| 7 | Student7 |
| 8 | Student8 |
| 9 | Student9 |
...等等,直到 Student100
教师桌:
| id | name |
|---|---|
| 1 | Teacher1 |
| 2 | Teacher2 |
| 3 | Teacher3 |
student_teacher 表:
| id | studentId | teacherId |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 1 | 3 |
| 4 | 2 | 1 |
| 5 | 2 | 2 |
| 6 | 2 | 3 |
...以此类推,直到所有 100 名学生都与教师 1、教师 2 和教师 3 在一起
这是我当前的 sql 查询:
SELECT DISTINCT(student.*), COUNT(*) OVER() AS "total_count" from student
JOIN student_teacher on student_teacher.studentId = student.id
JOIN teacher on student_teacher.teacherId = teacher.id
WHERE teacher.id = 2
LIMIT 10 OFFSET 0
“total_count”应该是 300,但我希望它是 100,因为只有 100 个不同的学生(我可以看到只有 100 行)。
有没有简单的方法来实现这一点?任何帮助将不胜感激。
【问题讨论】:
-
请注意,
distinct不是函数。它始终适用于选择列表中的所有列。用括号括住一个(或多个)列不会改变任何东西并且是无用的。distinct (a),b与distinct a,(b)或distinct a,b相同,distinct (t.*), x与distinct t.*, x相同
标签: postgresql