mysql - 有没有办法改进这个 SQL 查询以按特定顺序检索数据?
问题描述
我有一个包含以下 2 个表的数据库
帖子:
|post_id| text |post_date(time_stamp)|
喜欢:
| like_id | likee (1 or -1) | post_id | like_date (time_stamp) |
我正在尝试恢复过去一小时内被点赞的所有帖子,并按照他们在过去一小时内收到的点赞数对它们进行排序。
我尝试了以下查询,该查询返回了过去一小时内喜欢的所有帖子,但我无法弄清楚如何按每个 post_id 的喜欢的总和来排序。
SELECT * FROM posts
INNER JOIN likes ON posts.post_id = likes.post_id
WHERE TIMESTAMPDIFF(HOUR,like_time,NOW())< 1 AND likee= 1
有什么办法可以通过修改查询来实现吗?
解决方案
首先计算最后一小时的点赞数(或正面点赞数):
SELECT post_id,
SUM( likee ) as total_likes,
SUM( CASE WHEN likee = 1 THEN 1 ELSE 0 END ) as total_positive_likes
FROM likes
WHERE like_date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)
GROUP BY post_id;
请注意,您不会更改字段,而是通过使用索引的方式like_date
创建常量。NOW()
现在你加入你的帖子,总喜欢
SELECT p.*, l.total_likes
FROM Post p
JOIN ( SELECT post_id,
SUM( likee ) as total_likes,
SUM( CASE WHEN likee = 1 THEN 1 ELSE 0 END ) as total_positive_likes
FROM likes
WHERE like_date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)
GROUP BY post_id
) L
ON p.post_id = l.post_id
ORDER BY l.total_likes DESC
推荐阅读
- c# - 创建我的模型 Jobs 的 DropDownList 并在 CreateEmployeesViewModel 中使用它
- tensorflow - 如何设置 Keras 层以在返回元组中包含“无”
- python - Python Dict:如何从 dicts 中获取有序的差异集?
- .net - 在 aws 中实现应用程序负载均衡器后,.net 应用程序未在 8080 端口上运行
- mysql - 错误代码:1054 'where 子句'中的未知列'billId'
- tensorflow - 如何为多维数组创建 conv1d
- android - Ejabberd 和 Conversations (Android) 上的 HTTP 可恢复下载
- c# - Unity C# 脚本中的这个变量是什么?
- uwp - 单击UWP应用右上角的关闭图标时是否可以弹出我的对话框?
- machine-learning - 线性回归的八度梯度下降