2015-04-02 130 views
1

我有一个包含音乐排行榜的应用程序来展示顶级曲目(它显示前10名)。限制查询结果

但是,我试图限制图表,以便任何特定的用户不能同时在顶部图表上有多个轨道。

如果您需要更多信息,请让我知道。

回答

1

您可以使用row_number()函数,该函数提供一个在用户标识更改时重置的运行编号。然后你可以使用在WHERE子句创建每个用户的限制:

SELECT * FROM (
    SELECT COALESCE(sum(plays.clicks), 0), 
     row_number() OVER (PARTITION BY users.id ORDER BY COALESCE(sum(plays.clicks), 0) DESC), 
     users.id AS user_id, 
     tracks.* 
     FROM tracks 
      JOIN plays 
      ON tracks.id = plays.track_id 
      AND plays.created_at > now() - interval '14 days' 
      INNER JOIN albums 
      ON tracks.album_id = albums.id 
      INNER JOIN users 
      ON albums.user_id = users.id 
      GROUP BY users.id, tracks.id 
      ORDER BY 1 desc) sq1 
    WHERE row_number <= 2 LIMIT 10; 
+0

对不起@Simo,这是行不通的 – Andrew 2015-04-02 20:59:06

+0

纠正的小错误,被现在的工作?这个版本经过测试,所以如果它不工作,我想知道可能的错误信息等。 – 2015-04-03 12:16:58