2013-08-30 89 views
8

我有一個表,大致是:在一個Postgres表中選擇每個組隨機行

id | category | link | caption | image 

我的目標是在表中來從各個不同類別排隨機,在所有類別表。計劃然後將每行分配給其各自類別的變量。

現在,我使用多個SELECT語句類似:

SELECT link, caption, image FROM table WHERE category='whatever' ORDER BY RANDOM() LIMIT 1

但這似乎不雅,並創造了更多前往DB,這是昂貴的。

我很確定有一種方法可以在Postgres中使用窗口函數來做到這一點,但我沒有經驗與他們,我不完全確定如何使用一個來獲得我想要的。

感謝您的幫助!

回答

12

嘗試類似:

SELECT DISTINCT ON (category) * 
FROM table 
ORDER BY category, random(); 

或者與視窗功能:

SELECT * 
FROM (
SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn 
FROM table) sub 
WHERE rn = 1; 
+0

好極了!這兩種似乎都適合我的目的。謝謝! – Steve

相關問題