В Postgres выбрать 10 строк и чтобы в этот набор точно попадала строка у определенным условием
Есть одна таблица public.kit, допустим, на 1000 строк с полями name и code.
| name | code |
|---|---|
| qqqq | q11 |
| wwww | w21 |
| eeee | e22 |
| rrrr | r23 |
...
Мне необходимо выбрать 10 строк (любых) и чтобы в этот набор точно попадала строка с условием code = 'e22'
Т.е. запрос что-то вроде:
SELECT k.*
FROM public.kit k
WHERE k.code IN ('e22', SELECT code FROM public.kit LIMIT 10)
(такой запрос, естественно, работать не будет)
Можно ли реализовать это условие в одном запросе?
Ответы (2 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
Используйте UNION ALL + LIMIT:
SELECT k.*
FROM public.kit k
WHERE k.code = 'e22'
UNION ALL
(SELECT k.*
FROM public.kit k
WHERE k.code != 'e22'
LIMIT 9)
или так:
SELECT k.*
FROM public.kit k
WHERE k.code = 'e22'
OR k.code in (
select code
from public.kit
where code != 'e22'
LIMIT 9)
Автор решения: Akina
→ Ссылка
SELECT {columnset}
FROM {tableset}
ORDER BY {criteria}, {another expressions}
LIMIT {limit}
В данном конкретном случае
SELECT k.*
FROM public.kit k
ORDER BY k.code = 'e22' DESC, RAND()
LIMIT 10