为什么distinct(列)在按顺序添加时返回重复项



SQL:

select distinct
h.teacher_id,
h.last_updated_at,
c.name
from sometable h 
inner join class c on h.teacher_id=c.id
where last_updated_at is not null
order by last_updated_at desc limit 5;

我得到了重复的teacher_id作为响应。我哪里错了?我想返回上次更新的教师姓名和id。

您可能会看到,有问题的teacher_id有多个类与之相关。如果您需要每个老师和他们领导的所有类都有一个记录,则可以使用类似STRING_AGG(c.name)的东西(取决于您的PostgreSQL版本(。或者,您可以用COUNT(c.name)返回他们领导的类的数量。

在这两种情况下,您都需要GROUP BY老师的ID和上次更新。

SELECT DISTINCT * FROM ...返回唯一的。同一位老师可以出现多次,而其他栏目则不同。

如果希望所选列上的行是唯一的,请使用DISTINCT ON。类似:

SELECT DISTINCT ON (teacher_id)
h.teacher_id,
, h.last_updated_at
, c.name
FROM   ...
ORDER  BY teacher_id, last_updated_at DESC
LIMIT  5;

详细说明:

  • 选择每个GROUP BY组中的第一行

如果您想要不同的ORDER BY,请参阅:

  • PostgreSQL DISTINCT ON与不同的ORDER BY

最新更新