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;
Другие вопросы по тегам