2010-09-21 74 views
0

這裏有一些,但我今晚要麼很慢,要麼我想做一些不可能的事情。我有這樣的設置MySQL的百分比(有點複雜嗎?)

`id` int(11) NOT NULL AUTO_INCREMENT, 
`score` float NOT NULL, 
`userId` int(11) NOT NULL 
`movieId` int(11) NOT NULL 

考慮到這一點,我想從在給定的電影所有的用戶都將體驗一個百分比,我如何能夠做到這一點,因爲用戶可以爲「他們打分好「,任何高於0的值,以及低於0的任何值都是」壞「?比方說,一部給定的電影有4個經驗,其中3個是「2」,1是「-2」我想返回該電影的「相似」的「porcentage」。

我瘋了嗎?

回答

0

用途:

SELECT x.movieid, 
     x.score, 
     COUNT(x.userid)/y.score_count AS percentage 
    FROM YOUR_TABLE x 
    JOIN (SELECT t.movieid, 
       COUNT(t.score) AS score_count 
      FROM YOUR_TABLE t 
     GROUP BY t.movieid) y ON y.movieid = x.movieid 
GROUP BY x.movieid, x.score 
+0

@ p.campbell:MySQL的[隱藏列功能](http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html),返回與您的輸出相同的值。 – 2010-09-22 01:06:56

+0

好東西。我仍然是一個MySQL的學生:)顯然,如果你認爲這個功能是一個福音或禍根? – 2010-09-22 01:19:42

+0

@ p.campbell:我承認,我並不自豪地依賴它 - 我的選擇是不使用它,因爲SQLite是我知道的唯一支持這個的其他數據庫。任何其他人,你必須使用你的方法。 – 2010-09-22 01:26:50

1

這應該有助於讓你開始。我已經使用了SQL Server的TSQL,但是如果語法不同(在MySQL中看起來CAST應該是相同的),只需在此處進行調整,就可以使用MySQL進行調整。

SELECT Score, 
     (NumWithScore/(SELECT CAST(COUNT(userid) as decimal(10,2)) From Movies where MovieID= 7 ) * 100 
     )AS PercentageVotes 
FROM 
(
    SELECT Score,   
      COUNT(*) AS NumWithScore   
    FROM Movies AS M 
    WHERE MovieID = 7 
    GROUP BY Score 
) AS S 

我使用的數據是:

  • 2項具有值與值2
  • 1項-2

結果:

Score | PercentageVotes 
------+---------------- 
2.00 | 66.6666666 
-2.0 | 33.3333333 

Full code up on PasteBin