MySQL百分比(有点复杂?)

时间:2010-09-21 23:40:13

标签: sql mysql aggregate-functions

周围有一些,但我今晚要么慢,要么我想做一些不可能的事情。我有这个设置

`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”我想要回复那部电影“相似”的“百分比”。

我疯了吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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