Как правильно выбрать несколько групп в одном наборе результатов? - PullRequest
0 голосов
/ 12 октября 2018

Допустим, у меня есть таблица контактов с приоритетным столбцом.Приоритетные значения 1-3.Я хочу выбрать контакты 12 контактов, и здесь должны быть перечислены контакты всех приоритетов - 4 контакта с приоритетом 1, 4 - с приоритетом 2 и 4 - с приоритетом 3.

FIRST_NAME | LAST_NAME | PRIORITY |
-----------|-----------|----------|
A          | AB        | 1        |
qwerty     | AB        | 1        |
Efr        | AB        | 1        |
University | AB        | 1        |
United     | AB        | 2        |
Art        | AB        | 2        |
Falco      | AB        | 2        |
Some       | AB        | 2        |
123        | AB        | 3        |
Greeb      | AB        | 3        |
Greea      | AB        | 3        |
Greem      | AB        | 3        |

Если я просто ЗАКАЗАТЬ ПОприоритет, это даст мне, очевидно, только контакты с приоритетом 1. Сначала, а затем остальные.

Я думал, что могу использовать здесь оконную функцию PostgreSQL, но не уверен, все же, если это можно сделать.

SELECT * FROM
  (SELECT
    first_name, last_name, priority, created_at,
    ROW_NUMBER() OVER (PARTITION BY priority ORDER BY created_at ASC) AS rank FROM contacts
  ) c
LIMIT 10

1 Ответ

0 голосов
/ 12 октября 2018

Вы были близки.Вместо использования LIMIT необходимо ограничить результирующий набор только записями, номера строк которых меньше или равны 4 (для каждого приоритетного раздела).

SELECT first_name, last_name, priority, created_at
FROM
(
    SELECT c.*,
        ROW_NUMBER() OVER (PARTITION BY priority ORDER BY created_at) AS rn
    FROM contacts c
) t
WHERE rn <= 4;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...