Ранжирование с использованием нескольких столбцов - PullRequest
1 голос
/ 21 февраля 2020

Мне очень нужна ваша помощь по этому сценарию: у меня есть эта таблица (без столбца «Ранг»):

+------------+---------+---------+-------+------+--------+------------+------+
| Profile ID | Email   | lname   | fname | Type | Salary | Created    | Rank |
+------------+---------+---------+-------+------+--------+------------+------+
| 1          | a@a.com | Templar | Simon | A    | 200    | 01.01.2020 | 2    |
+------------+---------+---------+-------+------+--------+------------+------+
| 2          | a@a.com | Madison | James | B    | 100    | 01.01.2020 | 1    |
+------------+---------+---------+-------+------+--------+------------+------+
| 3          | a@a.com | Adams   | Dan   | C    | 300    | 02.01.2020 | 2    |
+------------+---------+---------+-------+------+--------+------------+------+
| 4          | b@b.com | Adams   | Emily | A    | 200    | 04.01.2020 | 2    |
+------------+---------+---------+-------+------+--------+------------+------+
| 5          | b@b.com | Adams   | Kim   | C    | 300    | 05.01.2020 | 1    |
+------------+---------+---------+-------+------+--------+------------+------+

Где я хотел бы ранжировать Профили на основе дубликата электронной почты, используя следующий критерий :

  • Если «Тип» = B, тогда выигрывают все
  • Если «Тип» = A или C, а lname совпадает, тогда ранг основывается на самой высокой зарплате
  • Если 'Type' = A или C, а lname не то же самое, то ничего не должно измениться, и оба профиля получат одинаковый ранг, тогда

Как я могу это сделать что с использованием SQL рейтинга?

1 Ответ

1 голос
/ 21 февраля 2020

Вы хотите использовать rank(). Я думаю, что логика c выглядит примерно так:

select t.*,
       rank() over (partition by email
                    order by (case when type = 'B' then 1 else 2  end),
                             salary desc
                   ) as ranking                          
from t;

Совершенно неясно, что вы подразумеваете под lname, будучи тем же самым. Так же как и что? Но я не думаю, что это необходимо для вашей логики c.

...