Мы все используем ROW_NUMBER () OVER (Порядок сортировки по столбцу1 по столбцу2), когда мы пытаемся упорядочить строки на основе столбца раздела.Вот у меня вопрос -
Учитывая таблицу Employee с двумя столбцами (Emp_id, Salary).Как вернуть первые 10 строк (упорядоченные по зарплате) из этой таблицы, не используя ничего из следующего.
rank, cte, подзапросы, top, limit, генераторы, order by, переменные, определяемые пользователем или встроенные функции или встроенные функции базы данных.
Вот ссылка SQL Fiddle http://www.sqlfiddle.com/#!18/22ab9/10
Единственный способ заставить это работать до некоторой степени - использовать самообъединение и использовать «наличие» для фильтрации первых 10 рангов.Однако я не могу генерировать номера строк.Если есть связь, я присваиваю тот же ранг участвующей строке, в результате чего возвращаются неправильные первые 10 строк.
- Вот то, что я написал
select e1.Emp_id, e1.Salary, count(distinct e2.salary) rnk
from
Employee e1
join
Employee e2 on e1.Salary <= e2.Salary
group by
e1.Emp_id, e1.salary
having count(distinct e2.salary)<= 10
- Вот как я ожидаю, что оно будет вести себя
select *
from
(
select e1.Emp_Id, e1.Salary, ROW_NUMBER() OVER (Order by Salary desc) rnk
from Employee e1
) a where rnk <= 10
Как мне справляться со связями в себеприсоединиться и все еще иметь возможность назначить ему другой ранг / номер строки?