SQL - выбор по статусу
Мне нужно сделать следующий выбор.
У меня есть список 100.000 пользователей с различным статусом (1 - 4). Из этого количества мне нужно выбрать 10.000 пользователей, сначала все со статусом 4 (но если их меньше 10.000 со статусом 4, тогда выбирайте всех со статусом 3 и затем с 2 и затем с 1)
Помощь высоко ценится.
Спасибо за ответы, я пытался перейти с Гордонс версии. Поскольку мне нужно объединиться, у меня есть следующее. Но это позволяет мне расставлять приоритеты только для второго выбора (%@test2.com), но он мне понадобится для каждого выбора, который я создаю. Если я поставлю "order by" перед объединением, я получу уведомление о неверном синтаксисе:
SELECT TOP 10000 *
FROM [table]
WHERE Email like '%@test1.com' and score in ( 1, 2, 3, 4)
UNION
SELECT TOP 5000 *
FROM [table]
WHERE Email like '%@test2.com' and score in ( 1, 2, 3, 4)
order by score desc
1 ответ
Это запрос расстановки приоритетов. Вы можете справиться с этим, используя стандартную функцию ANSI row_number()
:
select t.*
from (select t.*,
row_number() over (order by status desc) as seqnum
from t
where status in (1, 2, 3, 4)
) t
where seqnum <= 10000;
Вы также можете упростить это до:
select t.*
from t
where status in (1, 2, 3, 4)
order by status desc
fetch first 10000 rows only;