从表格中选择前20个分数

时间:2011-05-14 08:06:52

标签: sql

我有一张如下表格:

votes
-----
page_id - long
vote_type - varchar which is either 'UP' or 'DOWN'
voter_id - varchar

我想做的是获得票数最多的前20页ID(UP票数减去DOWN票数)。

有人可以帮我解决这个功能的SQL查询吗?我基本上想要显示大多数投票页面的“高分”列表。

3 个答案:

答案 0 :(得分:3)

如果可以的话,将投票作为数字更为明智,即“UP”为+1,“DOWN”为-1。然后你可以按每个页面进行分组,然后对它们进行SUM以获得累积的差异。

例如,表格如下:

votes
-----
page_id - long
voter_id - varchar (but should be long as well, though)
vote_score - int (+1, -1)

然后就这样做

SELECT SUM(vote_score) FROM votes GROUP BY page_id

要获得前N分,只需按总分排序:

SELECT SUM(vote_score) AS votes, page_id
FROM votes
GROUP BY page_id
ORDER BY votes ASC

答案 1 :(得分:2)

基本上,您需要使用案例陈述将'UP''DOWN'值映射到+1-1

SELECT TOP 20
    page_id,
    SUM(CASE vote_type
        WHEN 'UP' THEN 1
        WHEN 'DOWN' THEN -1
        ELSE 0
        END) AS score,
FROM
    votes
GROUP BY
    page_id
ORDER BY
    score DESC;

答案 2 :(得分:0)

除了Kyle和csl的建议之外,还可以考虑存储(和索引)最终得分本身。这将允许您使用索引查询它。