2009-08-27 8 views
0

Je dois effectuer une requête SQL pour obtenir les 10 meilleurs albums en fonction du nombre de vues. Le nombre de vues correspond en fait à la somme des vues de chaque chanson de l'album spécifié.Aide sur une requête SQL

Mes tableaux sont:

albums: 
- album_id 
- album_name 
- album_owner 

songs: 
- song_id 
- song_name 
- song_album 
- song_owner 
- song_views 

Pouvez-vous les gars me aider avec celui-ci?

+0

Avez-vous besoin de le faire en une seule requête? – mck89

+0

Oui, malheureusement. – Psyche

Répondre

4
select sum(song_views) as 'song_sum',album_name 
from albums a 
inner join 
songs s 
on a.album_id = s.song_album 
group by album_name 
order by song_sum DESC 
limit 0,10; 

si song_album fait référence à l'identifiant de l'album ...

+0

Je pense que c'est ça! Le résultat a l'air ok Merci! – Psyche

3

Essayez ceci:

SELECT TOP 10 a.album_id, a.album_name, a.album_owner, SUM(s.song_views) 
FROM albums a 
     INNER JOIN 
       songs s 
       ON a.album_id = s.song_album 
GROUP BY a.album_id, a.album_name, a.album_owner 
ORDER BY SUM(s.song_views) DESC 
+0

Nice - excuse mon ignorance mais est la clause TOP juste MSSQL spécifique? Quels seraient les équivalents dans PostgreSQL/SQLite/MySQL? –

+0

@ meder limite d'utilisation 10 ... pour le top 10 –

+0

Je reçois une erreur disant "Utilisation invalide de la fonction de groupe" :( – Psyche

2

Quelque chose comme:

select top 10 song_album 
from songs 
group by song_album 
order by sum(song_views) desc 
0

Je ne pouvais pas courir, mais il devrait être le long des lignes de

select album_name, sum(song_views) as views from albums join songs on songs.album_id = songs.song_album group by album_id order by views desc limit 10 
0

SELECT TOP 10 song_album des chansons GROUPE PAR ORDRE PAR song_album somme (song_views) desc