Oracle SQL — Как вернуть имя с наибольшим идентификатором, заканчивающимся на определенное число

#sql #oracle

#sql #Oracle

Вопрос:

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

 Members: |ID  |Name      |
         -----------------
         |123 |foo       |
         |456 |bar       |
         |789 |boo       |
         |1226|far       |
 

Результат, который мне нужно получить, выглядит примерно так

 |LAST_NUMBER  |OCCURENCES  |HIGHEST_ID_GUY  |
---------------------------------------------
|3            |1           |foo             |
|6            |2           |far             |
|9            |1           |boo             |
 

Однако, хотя я могу получить корректное отображение первых двух результатов, я понятия не имею, как отобразить HIGHEST_ID_GUY. Мой код выглядит следующим образом:

 SELECT DISTINCT SUBSTR(id, LENGTH(id - 1), LENGTH(id)) AS LAST_NUMBER,
COUNT(*) AS OCCURENCES
  /* This is where I need to add HIGHEST_ID_GUY */
FROM Members
GROUP BY SUBSTR(id, LENGTH(id - 1), LENGTH(id))
ORDER BY LAST_NUMBER
 

Любая помощь приветствуется 🙂

Ответ №1:

Если id это число, то используйте арифметические операции:

 select mod(id, 10) as last_digit,
       count(*),
       max(name) keep (dense_rank first order by id desc) as name_at_biggest
from t
group by mod(id, 10);
 

Если id это строка, то вам нужно преобразовать в число или что-то подобное, чтобы определить «наивысший идентификатор». Например:

 select substr(id, -1) as last_digit,
       count(*),
       max(name) keep (dense_rank first order by to_number(id) desc) as name_at_biggest
from t
group by substr(id, -1);