Извлечение случайных записей для каждой пары значений в другой таблице SQL

#sql #database #postgresql

#sql #База данных #postgresql

Вопрос:

Я хочу получить 2 случайных имени учащихся в таблице 1 для каждой пары Класс-Учитель в таблице 2. Я изучил использование

Таблица 1

Класс Учительница
Математика Мистер Смит
Математика Миссис Ким
Наука Мистер Смит
Наука Миссис Ким

Таблица 2

Студенты
Мэтт
Джесс
Том
Салли
Стержень
Никки

Последний пример

Класс Учительница Студенты
Математика Мистер Смит Мэтт
Математика Мистер Смит Салли
Математика Миссис Ким Никки
Математика Миссис Ким Стержень
Наука Мистер Смит Мэтт
Наука Мистер Смит Джесс
Наука Миссис Ким Том
Наука Миссис Ким Стержень

Комментарии:

1. Вам действительно нужно, чтобы они были случайными, или подойдет любой студент?

2. Они должны быть случайными

Ответ №1:

Вы можете использовать RANDOM() для сортировки строк случайным образом, а затем выбрать первые два.

Например:

 select
  a.*, x.*
from table1 a,
lateral (
  select  *
  from table2
  order by length(a.class) * 0   random()
  limit 2
) x
 

Результат:

  class    teacher    student 
 -------- ---------- ------- 
 Math     Mr. Smith  Matt    
 Math     Mr. Smith  Jess    
 Math     Mrs. Kim   Nikki   
 Math     Mrs. Kim   Rod     
 Science  Mr. Smith  Rod     
 Science  Mr. Smith  Jess    
 Science  Mrs. Kim   Tom     
 Science  Mrs. Kim   Jess    
 

Смотрите Пример запуска в DB Fiddle. Пожалуйста, обратите внимание, что результаты меняются при каждом запуске запроса.