2009-07-13 50 views
2

在我運行的網站上,我讓用戶爲各個帖子評分(3,2,1)。我用下面的SQL(在MySQL)來獲取每個值的得票百分比:選擇具有不同值的行的百分比

SELECT vote, COUNT(*) * t.factor AS pct 
FROM ratings 
JOIN (
    SELECT 100/COUNT(*) AS factor 
    FROM ratings 
) AS t 
GROUP BY vote 
LIMIT 0, 30; 

這工作正常計算行的百分比爲整個表。現在,我只需要一個特定帖子的百分比,在列表中由「id」列標識。我該怎麼做?

回答

1

假設投票列包含了投票,即(3,2,1)的值,那麼你就需要下面的查詢每票製表的百分比:

SELECT r.id, r.vote, SUM(r.vote)/t.totalVotes AS percentOfVotes 
FROM ratings r 
JOIN (SELECT id, COUNT(id) AS totalVotes 
     FROM ratings 
     GROUP BY id) AS t ON t.id = r.id 
WHERE r.id = @id -- id of post you want 
GROUP BY r.id, r.vote 
1

這個問題似乎有點誤導......但這是我想象的樣子。這樣的作品,但我一直在勸

SELECT vote, COUNT(*) * t.factor AS pct 
FROM ratings 
JOIN (
SELECT 100/COUNT(*) AS factor 
FROM ratings 
where id = id of the post 
) AS t 
where id = id of the post 
GROUP BY vote 
+0

原來你在內部和外部選擇上都需要一個where子句。 – 2009-07-13 20:56:09

1

的一種方法是不是最有效的世界是這樣的:

SELECT vote, COUNT(*) * t.factor AS pct 
FROM ratings 
JOIN (
    SELECT 100/COUNT(*) AS factor 
    FROM ratings 
    WHERE id = 36 
) AS t 
WHERE id = 36 
GROUP BY vote 
LIMIT 0, 30; 

我曾嘗試添加一個where子句內和外部選擇,但不是兩個!當然有意義。

+0

是的。我在下面的答案中都沒有where子句,這也是我的第一個猜測。 – Eric 2009-07-13 20:56:30