Лучшие n различных значений одного столбца в Oracle - PullRequest
2 голосов
/ 02 июля 2019

Я использую запрос, где часть его получает верхние 3 определенного столбца.

Создает отдельный подзапрос столбца, ограниченный 3-мя числом строк, а затем фильтрует эти строки в главном запросе, чтобы выполнить верхний 3.

WITH subquery AS (
  SELECT col FROM (
    SELECT DISTINCT col
    FROM tbl
  ) WHERE ROWNUM <= 3
)

SELECT col
FROM tbl
WHERE tbl.col = subquery.col

Итак, исходная таблица выглядит так:

 col
-----
 a
 a
 a
 b
 b
 b
 c
 d
 d
 e
 f
 f
 f
 f

И запрос возвращает верхние 3 столбца (не верхние 3 строки, которые были бы только a):

 col
-----
 a
 a
 a
 b
 b
 b
 c

Я пытаюсь узнать, есть ли более правильный способ сделать это, так как реальный запрос велик и дублирует его размер с подзапросом, который выглядит почти так же, просто для того, чтобы получить топ-3, трудно работать и понимать /modify.

Есть ли лучший способ сделать первые 3 различных значения одного столбца в Oracle?

1 Ответ

4 голосов
/ 02 июля 2019

Да, вы можете использовать dense_rank и избегать дублирования кода:

select col 
  from (select col, dense_rank() over (order by col) rnk from tbl)
  where rnk <= 3

демо

...