#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);