выберите каждые 2 случайные записи из отдельной группы - PullRequest
0 голосов
/ 02 мая 2018

это скриншот моей таблицы, и моя СУБД postgresql

field_1 - уникальный ключ моей записи, field_2 - код группы, field_4 - номер телефона.

отсюда я хочу выбрать 2 произвольных записи из отдельной группы. другими словами, выбрав 2 случайные записи и сгруппировав их по field_2

Я только смог сделать запрос ниже.

 select distinct(field_2) as group_name from mytable group by 1

.. пожалуйста, помогите мне продолжить мой проект :(

enter image description here

Ответы [ 3 ]

0 голосов
/ 02 мая 2018

Попробуйте запрос ниже:

SELECT DISTINCT ON (field_2) *
FROM table 
ORDER BY (field_2),random() 
LIMIT 2

Это вернет 2 случайные записи field_2:

SELECT
  *
FROM (
  SELECT
    ROW_NUMBER() OVER (PARTITION BY field_2 ORDER BY (field_2 ),random()) AS r,
    t.*
  FROM
    mytable t) x
WHERE
  x.r <= 2
0 голосов
/ 02 мая 2018

Я не знаю ожидаемого результата, может быть, это поможет вам: первый порядок случайным образом в группе (field_2) выберите первое и второе поле_1 и затем выведите

with temp_shuffel as
(
select 
*
from public.tbl_test
order by field_2,  random()
),

temp_values as
(
select 
nth_value(field_1,1) over (PARTITION by field_2 order by field_2 rows between unbounded preceding and unbounded following) as f1,
nth_value(field_1,2) over (PARTITION by field_2 order by field_2 rows between unbounded preceding and unbounded following) as f2
 from temp_shuffel
)

select distinct on (f1,f2)
row1.field_1,
row1.field_2,
row1.field_4,

row2.field_1 as field2_1,
row2.field_2 as field2_2,
row2.field_4 as field2_4

from temp_values
left join public.tbl_test as row1  on row1.field_1 = temp_values.f1
left join public.tbl_test as row2 on row2.field_1 = temp_values.f2
order by f1,f2,row1.field_1
0 голосов
/ 02 мая 2018

Вы можете написать следующий запрос:

SELECT * FROM mytable GROUP BY field_2 ORDER BY RAND () LIMIT 0,2

...