Запрос всегда возвращать фиксированное количество строк - PullRequest
0 голосов
/ 26 апреля 2018

Я могу написать запрос, чтобы вернуть 5 лучших продуктов в категории продуктов на основе их продаж.Однако в случаях, когда, скажем, в категории «Продукт» есть только 2 продукта, возвращаются только 2 строки.

Существует ли способ вставить фиктивные строки, чтобы 5 строк всегда возвращались для каждой категории продуктов.Фиктивные строки просто должны иметь правильную категорию продукта и нулевые значения для оставшихся столбцов.

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте UNION ALL, чтобы добавить дополнительные строки, а затем отфильтруйте, чтобы сохранить только 5

SELECT *
FROM   (
  SELECT col1, col2
  FROM   your_table
  WHERE  ROWNUM <= 5
UNION ALL
  SELECT NULL, NULL FROM DUAL CONNECT BY LEVEL <= 5
-- ORDER BY col1 NULLS LAST, col2 NULLS LAST -- If necessary
)
WHERE  ROWNUM <= 5

Или, если вы делаете это для нескольких групп:

WITH categories ( category, col1, rn ) AS (
  SELECT category,
         col1,
         ROW_NUMBER() OVER ( PARTITION BY category ORDER BY col1 )
  FROM   products
)
SELECT category,
       col1
FROM   (
  SELECT category,
         col1,
         ROW_NUMBER() OVER ( PARTITION BY category ORDER BY rn ) AS rn
  FROM   (
    SELECT category,
           col1,
           rn
    FROM   categories
    WHERE  rn <= 5
  )
  UNION ALL
  (
     SELECT category,
            NULL,
            5 + LEVEL
     FROM   categories
     WHERE  rn = 1
     CONNECT BY LEVEL <= 5
  )
)
WHERE  rn <= 5;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...