我正在制作一个视图,以便在过去两天内显示最受欢迎的问题。 但是因为我们没有很多活动,所以它只显示了68个项目。 我想为此声明添加一种方法,如果结果少于1000个项目,则添加其余项目而不必担心排名。
1000个结果= 68个流行,932个常客
SELECT *, ((likesCount*.8)+(commentsCount*.6)+(sharesCount*1)/2.4) as wavg
FROM production.question
JOIN production.feed
ON production.question.id = production.feed.q_id
WHERE (production.feed.timestamp >= (now() - interval 2 day))
GROUP BY production.question.name
ORDER BY wavg DESC
LIMIT 0,1000;
(只返回68个结果,只需要通过说SELECT * FROM production.question或其他任何内容来添加其他932)。
答案 0 :(得分:2)
您可以通过将where
条件移动到order by
子句中来执行您想要的操作。因此,首先按照您想要的数据排序,然后完成其余的数据。
以下查询还将join
替换为left join
,并在order by
中包含第二个表的匹配项:
SELECT *, ((likesCount*.8)+(commentsCount*.6)+(sharesCount*1)/2.4) as wavg
FROM production.question q LEFT JOIN
production.feed f
ON q.id = f.q_id
GROUP BY q.name
ORDER BY (f.timestamp >= (now() - interval 2 day)) desc,
(f.q_id is not null) desc,
wavg DESC
LIMIT 0,1000;
它还使用表别名来使查询更具可读性。
编辑:
最后将问题随机化:
ORDER BY (f.timestamp >= (now() - interval 2 day)) desc,
wavg DESC,
rand()
LIMIT 0,1000;
这不会影响定义wavg
的任何内容,只影响记录的“其余”。