我具有要发布的外键(post_id)的表post
和comment
。我想获得100个“凹凸点排序”的帖子。首先创建最新评论条目的帖子条目。我的第一次尝试是:
SELECT * FROM post WHERE id IN
(
SELECT DISTINCT post_id FROM comment
ORDER BY created_time DESC
LIMIT 100
);
返回:ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
第二次尝试:
SELECT * FROM post WHERE id IN
(
SELECT post_id from
(SELECT DISTINCT(post_id), posted FROM comment) AS c
ORDER BY c.created_time DESC
LIMIT 100
);
这次没有错误,但没有执行我想要的操作。如何使SQL执行我想要的工作?
[如果您要选择具有最新评论的100条帖子,则可以使用汇总:
select p.id, p.title, p.author
from posts p
inner join comments c on c.post_id = p.id
group by p.id, p.title, p.author
order by max(c.created_at) desc
limit 100
使用这种技术,您需要枚举要在posts
子句中的结果集中看到的所有select
列和在group by
子句中。
另一种选择是预先聚合:
select p.*
from posts p
inner join (
select post_id, max(created_at) max_created_at
from comments
group by post_id
order by max(created_at) desc
limit 100
) c on c.post_id = p.id
order by c.max_created_at desc