1

我已经设置了一个比赛,其中发送视频提交,然后人们对其进行投票。提交被发送到submissions具有以下结构的表中:

submission_id, title, videoname

投票表votes结构为:

video_id, voter_id

video_id 与提交表中的 submit_id 相关。

我想获得每个视频的票数,如下所示:

select video_id, count(1) from votes group by submission_id

但我也想显示每个视频的标题,所以结果是:

video_id, count, title

我是一个 sql 菜鸟,所以如果这是一个简单的陈述,请原谅我。我已经做了一些研究,但无法自己提出一些建议,希望能提供任何帮助。

4

4 回答 4

2

我建议使用 aLEFT JOIN而不是INNER JOIN... 而COUNT(v.video_id)不是COUNT(*). 这样,您仍将返回当前有 0 票的提交:

select
  s.submission_id as video_id,
  count(v.video_id) as vote_count,
  s.title
from
  submissions s
  left join votes v on v.video_id = s.submission_id
group by 
  s.submission_id, 
  s.title
于 2013-03-15T18:23:35.287 回答
0
select s.submission_id, s.title, s.videoname, c.cnt
from
submissions s,
(select video_id, count(1) as cnt from votes group by video_id) c
where
s.submission_id = c.video_id
于 2013-03-15T18:23:54.870 回答
0

这将返回您提交表中的每个视频,并在投票表中显示投票数。如果没有任何投票,它将在结果中显示为 NULL 作为 Votes 列

SELECT video_id, title, COUNT(voter_id) Votes
FROM submissions s
    LEFT OUTER JOIN votes v ON s.submission_id = v.video_id
GROUP BY video_id, title,
于 2013-03-15T18:23:59.407 回答
0

您必须在两个表之间进行连接以检索投票和视频标题,如下所示:

SELECT submissions.submission_id
     , COUNT(1)
     , submissions.videoname
FROM submissions LEFT OUTER JOIN votes
    ON votes.video_id = submissions.submission_id
GROUP BY submissions.submission_id, submissions.videoname
于 2013-03-15T18:25:18.403 回答