2010-09-21 4 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) возвращает те же значения, что и ваш вывод , –

+0

хороший материал. Я все еще ученик mysql, очевидно :) Любопытно, если вы считаете, что эта функция - благо или проклятие? –

+0

@ p.campbell: Я признаю, что я не горжусь тем, что полагаюсь на это - мое предпочтение было бы не в том, чтобы использовать его, потому что SQLite - это единственная другая БД, которую я знаю об этом. Любые другие, вам придется использовать свой подход. –

1

Это должно помочь вам начать работу. Я использовал TSQL из SQL Server, но если синтаксис не тот же (кажется, CAST должен быть тем же самым в MySQL), просто приведите его здесь, и вы пойдете в 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.

Смежные вопросы