#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. Пожалуйста, обратите внимание, что результаты меняются при каждом запуске запроса.