2009-08-27 109 views
0

我必须执行SQL查询才能根据视图数获取前10个相册。观看次数实际上是指定相册中每首歌曲的总观看次数。有关SQL查询的帮助

我的表是:

albums: 
- album_id 
- album_name 
- album_owner 

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

你们能帮助我这一个?

+0

你需要做的是在只有一个查询? – mck89 2009-08-27 08:56:57

+0

是的,很不幸。 – Psyche 2009-08-27 08:57:33

回答

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; 

如果song_album线指相册ID ...

+0

我认为这就是它! 结果看起来不错 谢谢! – Psyche 2009-08-27 09:04:56

3

试试这个:

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

不错 - 请原谅我的无知,但只是MSSQL特定的TOP子句? PostgreSQL/SQLite/MySQL中的等价物是什么? – 2009-08-27 09:00:02

+0

@ meder use limit 10 ... for top 10 – 2009-08-27 09:01:36

+0

我收到一个错误,提示“无效的使用组功能”:( – Psyche 2009-08-27 09:02:39

2

喜欢的东西:

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

我不能运行它,但它应该是沿

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诗经 GROUP BY song_album ORDER BY 总和(song_views)递减