PostgreSQL SELECT随机值具有唯一值 [英] Postgresql SELECT random with unique value

查看:345
本文介绍了PostgreSQL SELECT随机值具有唯一值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法进行一次干净的选择

I am not able to make one clean SELECT

我有带有字段
id,Providerid,deal_name的postgresql表

I have postgresql table with fields id , providerid, deal_name

我要使用唯一的Providerid进行随机选择

I want to make random select with unique providerid

SELECT * FROM deals ORDER BY random() LIMIT 10

如何设置此值以返回10个具有唯一Providerid的结果?

How I can set this to return 10 results with unique providerid's ?

推荐答案

您的问题是否可以改写为:

Can your question be rephrased as:

对于十个随机选择的提供者中的每一个,找到该提供商提供的一项随机选择的交易?

"For each of ten randomly selected providers, find one randomly selected deal offered by that provider" ?

如果是这样,这几乎可以告诉您该怎么做。您需要两层,一层通过以随机选择十个提供商,然后一层通过以选择每个提供商一个随机交易。

If so, that pretty much tells you what to do. You need two layers, one pass to randomly select ten providers, then one pass to select one random deal per provider.

给出虚拟数据:

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。不知道它是否很快;

... pretty much just by implementing the phrasing above as SQL. Don't know if it's fast; you get the idea.

如果上述措辞不正确,请通过示例数据和示例,或在描述中提供更多详细信息来澄清您的问题。

If the above rephrasing isn't correct, please clarify your question with sample data and an example, or some more detail in your description.

这篇关于PostgreSQL SELECT随机值具有唯一值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆