在我的数据库中,我的用户存储了偏好,他们喜欢的音乐百分比。所以用户Billy有以下偏好
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%
我还有一张桌子,里面有100万爵士乐,朋克和民间音乐曲目
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首民谣(根据他的偏好存储在第一张表中)。
如何从数据库构造这样的查询? 注意 :这显然是我的真实表格和数据的大大简化版本,但任何帮助肯定会帮助我解决我的真正问题。 < / p>
答案 0 :(得分: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