2012-02-16 49 views
2

在我的數據庫中,我的用戶有喜好存儲他們喜歡的音樂百分比。所以用戶比利有以下首複雜的結果分佈數據庫查詢

id:1 user:Billy music_type:Jazz percentage:50% 
id:2 user:Billy music_type:Punk percentage:25% 
id:3 user:Billy music_type:Folk percentage:25% 

我也有一個其中有

id:1 music_type:Jazz track_name:Bippity Boop 
id:2 music_type:Punk track_name:Grrrrrrrrrr! 
id:3 music_type:Folk track_name:DeDiDoDeeDoo 

我想告訴比利100首曲目百萬爵士,朋克音樂和民間音樂曲目表。其中50人是爵士,25人是朋克,25人是Folk(根據他的喜好儲存在第一張桌子上)。

如何從數據庫中構建這樣的查詢? 注意:這顯然是我真正的表和數據的大大簡化版本,但任何幫助肯定會幫助我解決我真正的問題。

+0

結果應如何排序? – Alp 2012-02-16 21:05:19

+0

由第二張表的編號爲 – jdee 2012-02-16 21:07:24

+0

的數據庫爲PostgreSQL – jdee 2012-02-16 21:34:51

回答

3

使用Postgresql 8.4或更高版本,您可以使用窗口函數按音樂類型對音軌進行分區,獲取每分區計數器,然後根據首選項使用它來限制每分區的結果。 這裏是一個SQL骨架:

select s.track_name,s.id from 
    (select id, track_name, music_type, row_number() over (partition by music_type) as r 
     from tracks) s, 
    preferences p 
    where username='Billy' 
    and p.music_type=s.music_type 
    and s.r<=p.percentage 
    order by s.id 
+0

用mysql也可以嗎? – Alp 2012-02-17 08:57:33