2015-04-02 127 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