我不能做一個乾淨的SELECTPostgreSQL的隨機選擇具有獨特的價值
我有一個領域PostgreSQL表 ID,providerid,DEAL_NAME
我要讓隨機選擇具有獨特providerid
SELECT * FROM deals ORDER BY random() LIMIT 10
我如何設置此返回10結果與唯一的提供者?
我不能做一個乾淨的SELECTPostgreSQL的隨機選擇具有獨特的價值
我有一個領域PostgreSQL表 ID,providerid,DEAL_NAME
我要讓隨機選擇具有獨特providerid
SELECT * FROM deals ORDER BY random() LIMIT 10
我如何設置此返回10結果與唯一的提供者?
可以將您的問題改述爲:
「各10個隨機選擇的供應商,找到由供應商提供一個隨機選擇交易」?
如果是這樣,那幾乎告訴你該怎麼做。您需要兩層,一個傳遞隨機選擇十個供應商,然後一個傳遞來爲每個供應商選擇一個隨機交易。
由於虛擬數據:
create table spam (deal text, provider text);
insert into spam(deal,provider)
SELECT prov_id||n::text, prov_id FROM (
SELECT chr(x) AS prov_id from generate_series(97, 92+26) x) y
CROSS JOIN generate_series(1,10) n;
select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10;
這裏有一個工程:
SELECT
(SELECT deal FROM spam WHERE spam.provider = sel_prov.provider ORDER BY random() LIMIT 1),
sel_prov.provider
FROM (select provider FROM spam GROUP BY provider ORDER BY random() LIMIT 10) sel_prov;
...非常簡單,只是通過實施以上爲SQL措辭。不知道它是否快速;你明白了。
如果上述改寫不正確,請通過示例數據和示例說明您的問題,或者在您的描述中提供一些更詳細的信息。
如果@Craig林格提出的改寫是正確的:
各10個隨機選擇的供應商,找到由供應商提供的
然後我可以建議另一種解決方案一個隨機選擇交易:
SELECT d.id, d.providerid, d.deal_name FROM (SELECT DISTINCT ON (providerid) providerid , id, deal_name FROM deals) d ORDER BY random() LIMIT 10;
我希望它會有所幫助!
方便。 'DISTINCT ON'很棒,我總是忘記它,因爲它的表現曾經很糟糕。 – 2012-08-20 07:06:46
Similar questions:http://stackoverflow.com/questions/8674718/best-way-to-select-random-rows-postgresql,http://stackoverflow.com/questions/6090969/postgresql-select-20-隨機記錄,http://stackoverflow.com/questions/5297396/quick-random-row-selection-in-postgres – 2012-08-17 14:57:57
你究竟是什麼意思的「獨特」在這裏?不同的,即10不一樣?請顯示您的表格結構和一些示例數據。 – 2012-08-17 14:59:29