2010-09-21 9 views
0

Il y en a quelques-uns autour, mais je suis soit lent ce soir ou j'essaie de faire quelque chose de pas possible. J'ai cette configurationMySQL pourcentage (un peu complexe?)

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

Compte tenu de cela, je veux obtenir un pourcentage de toutes les expériences de tous les utilisateurs dans un film donné, comment pourrai-je faire car les utilisateurs peuvent les évaluer comme " bien "avec une valeur supérieure à 0 et" mauvaise "avec une valeur inférieure à 0? Disons qu'un film donné a 4 expériences, où 3 sont "2" et 1 est "-2" Je voudrais retourner le "porcentage" de "similarité" de ce film.

Est-ce que je suis fou?

Répondre

0

Utilisation:

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 [fonction de colonne cachée] (http://dev.mysql.com/doc/refman/5.0/fr/group-by-hidden-columns.html), renvoie les mêmes valeurs que votre sortie . –

+0

bonnes choses. Je suis toujours un étudiant mysql évidemment :) Curieux si vous pensez que cette fonctionnalité est un avantage ou un fléau? –

+0

@ p.campbell: J'avoue que je ne suis pas fier d'y faire confiance - ma préférence serait de ne pas l'utiliser, car SQLite est le seul autre DB que je connaisse à le supporter. D'autres, vous devrez utiliser votre approche. –

1

Cela devrait vous aider à démarrer. J'ai utilisé TSQL à partir de SQL Server, mais si la syntaxe n'est pas la même (il semble que CAST devrait être le même dans MySQL), donnez-lui juste un tweak ici et vous y arriverez en 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 

Les données I utilisé était:

  • 2 objets ayant une valeur 2
  • 1 article ayant une valeur -2

résultats dans:

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

Full code up on PasteBin.