SQL 根据fid表中的nid以nid为连接跑comment表中对应的所有评论量及评论状态=0的概率,且评论数据按发布时间排序取前50条时的评论状态为0的率
时间: 2024-11-03 12:21:49 浏览: 8
在SQL查询中,你可以使用JOIN和GROUP BY语句来实现这个需求。假设你有两个表格,一个是`fid`表(可能包含`nid`和`fid`字段),另一个是`comment`表(包含`nid`, `comment_count`, `status`以及`timestamp`字段)。以下是一个示例查询:
```sql
SELECT
fid.nid,
COUNT(comment.id) AS comment_count,
COUNT(CASE WHEN comment.status = 0 THEN 1 END) / COUNT(comment.id) * 100 AS probability_status_0
FROM
fid
LEFT JOIN
comment ON fid.nid = comment.nid
WHERE
comment.status = 0 AND
comment.timestamp <= (SELECT MIN(timestamp) FROM comment ORDER BY timestamp LIMIT 50)
GROUP BY
fid.nid
ORDER BY
comment.timestamp ASC;
```
这个查询做了以下几件事:
1. 使用LEFT JOIN连接`fid`和`comment`表,保留所有`fid`表中的记录,即使在`comment`表中没有对应的评论。
2. 按照`nid`分组并计算每个`nid`下的评论总数(`comment_count`)。
3. 计算状态为0的评论比例(`probability_status_0`),这是通过条件`comment.status = 0`筛选出状态为0的评论数量除以总评论数得到的。
4. 只选择状态为0且发布时间在前50条的评论(`comment.timestamp <= (SELECT MIN(timestamp) FROM comment ORDER BY timestamp LIMIT 50)`)。
注意:这只是一个基本的示例,实际的SQL语法可能会因数据库系统的不同而略有差异。例如,某些数据库可能不支持直接在子查询中对整个结果集进行排序。在这种情况下,你可能需要先找出前50个时间戳,然后再执行上述查询。[^1]
阅读全文