MySQL запрашивает одинаковое количество состояний в заданном количестве возвращаемых записей - PullRequest
0 голосов
/ 08 марта 2019

Если у меня есть столбец телефона и столбец состояния. Могу ли я запросить конкретный LIMIT, скажем, 500, но я хочу, чтобы каждое состояние, имеющееся в столбце состояний, имело равное количество каждого в запросе 500 счетчиков.

пример: таблица = ironman

appid
phone(PK)
firstname
lastname
address
city
state
zip
called_count

Запрос:

SELECT 
FROM ironman
(A scripts that gives me (x amount) of phone numbers from each state)
WHERE called_count <= 4
LIMIT 500 OFFSET 0;

1 Ответ

0 голосов
/ 08 марта 2019

Используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...