Используйте ROW_NUMBER (), чтобы присвоить строкам позицию в группе состояний.Затем упорядочите строки по этому положению.Когда вы затем примените LIMIT, в каждом штате будет одинаковое количество строк (+ -1) - (при условии, что у вас достаточно телефонных номеров для каждого штата).
with numbered as (
select i.*
, row_number() over (partition by state order by phone) pos
from ironman i
-- put your WHERE clause here
), limited as (
select *
from numbered
order by pos asc, state asc
limit 6 -- set your limit here
)
select *
from limited
order by state, phone
db-скрипка
Если вы хотите, чтобы телефонные номера выбирались случайным образом - измените ПОРЯДОК на позицию
row_number() over (partition by state order by rand()) pos