如果结果小于数字,MYSQL如何添加更多行

标签 mysql sql

我正在创建一个 View ,以便显示过去 2 天内 HitTest 门的问题。 但由于我们的事件不多,因此仅显示 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 个结果,需要添加其他 932 个结果,只需说 SELECT * FROM production.question 或其他什么...)

最佳答案

您可以通过将 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 的任何内容,只会影响记录的“其余”部分。

关于如果结果小于数字,MYSQL如何添加更多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18812448/

相关文章:

mysql - 错误 1442 : Can't update table in stored function/trigger because it is already used by statement which invoked this stored function/trigger

mysql - 如何通过 mysql 中的连接提高性能排序

sql - 加入单行表 : subquery or cross join?

sql - 并发安全访问golang中的数据库

sql - Postgres无限 self 加入

sql - 如何使用参数从 bash 脚本运行 SQL 更新字符串?

mysql - MySQL select 语句中的重复行

php - 数据库结构跟踪用户是否打开特定内容的最佳实践?

MySQL 随机,间隔超过 40 万行

mysql - 在 Ubuntu 16.04 上重新安装 MySQL 5.7 服务器的问题