2011-03-18 4 views
1

J'ai du mal à comprendre ce que je veux dire. Je sais comment faire du SQL de base mais je suis un peu hors de ma profondeur avec celui-ci.Requête SQL pour extraire des données de plusieurs tables, et peut-être quelques calculs de base

J'essaie de mettre en place une requête qui retourne un tableau des jeux les mieux classés. Les utilisateurs peuvent classer un jeu sur 10. Je veux sélectionner une liste des 10 meilleurs jeux et les afficher dans un tableau basé sur ce qu'est leur rang moyen et aussi par le nombre de votes qu'ils ont. Donc, un jeu avec un rang moyen de 8 et 20 votes apparaîtra plus haut dans le graphique qu'un jeu avec 10 votes et un rang moyen de 8.

Si cela ne peut pas être fait avec du SQL pur, alors je peux toujours fais du codage pour le reste. A ce stade, il s'agit juste d'obtenir les données dont j'ai besoin, et dans le bon format.

Toute aide serait grandement appréciée.

Ma structure de table est la suivante:

jeux

| id | title | platform | genre | 

utilisateurs

| id | email | username | password | 

votes

| userid | gameid | vote | 

Le format des données que je veux revenir est:

| title | platform | average rank | votes | 

Merci.

Répondre

3

Vous pourriez group by sur les jeux, et le reste est assez simple:

select games.title 
,  games.platform 
,  games.genre 
,  avg(votes.vote) as AvgRank 
,  count(*) as VoteCount 
from games 
join votes 
on  votes.gamesid = games.gameid 
join users 
on  users.id = votes.userid 
group by 
     games.title 
,  games.platform 
,  games.genre 
order by 
     avg(votes.vote) desc 
,  count(*) desc 
limit 10 

Cette requête utilise limit 10 pour obtenir les 10 premières lignes. Si vous utilisiez SQL Server, vous utiliseriez select top 10 .... Oracle utilise where rownum < 11.

+0

Merci beaucoup. Tu m'as sauvé des heures! :) – jimbo77

Questions connexes