Положите результаты в группу из 2 или любое число, которое я укажу - PullRequest
1 голос
/ 21 июня 2019

Мне нужен способ поместить результаты в число указанных групп.

Я пробовал ntile() функцию, которую я думал бы использовать, но она не работает:

WITH CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number+1
  FROM CTE 
  WHERE Number < 100 
)
SELECT *, ntile(80) over (order by number desc) as 'test'
 FROM CTE

Для ожидаемых результатов в столбце Quartile должно выводиться число для каждых 2 записей (как указано в NTILE(80)), но это может быть 2, 4, 10 или любое другое число, которое я указываю.

Может быть, NTILE() не правильная функция, но есть ли функция, которая делает то, что я хочу?

Итак, если я укажу 3, то результат должен группировать каждые 3 записи.Если я укажу 15, то результат должен группировать каждые 15 записей и переходить к следующей группе.

Надеюсь, я проясню

Ответы [ 2 ]

1 голос
/ 21 июня 2019

... должен выводить число для каждых 2 записей ...

Нет, у вас есть 100 записей, и вы хотите разделить их на 80 групп. Вы получите несколько групп с 1 записью и другие группы с 2 записями.

Прочитайте определение NTILE(). Если вам нужны группы с 2 записями, вы можете сделать это, как показано ниже, разделив его на 50 groups:

WITH recursive
CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number + 1
  FROM CTE 
  WHERE Number < 100 
)
SELECT *, 
  ntile(50) -- changed here
  over (order by number desc) as test
FROM CTE

Вы не сказали, какой движок базы данных используете, поэтому я предположил PostgreSQL.

0 голосов
/ 21 июня 2019

Я думаю, вам просто нужен оператор модуля:

WITH CTE AS (
  SELECT 1 as Number
  UNION ALL
  SELECT Number+1
  FROM CTE 
  WHERE Number < 100 
)
SELECT cte.*, 
       (ROW_NUMBER() OVER (ORDER BY Number DESC) - 1) % 3  -- or however many groups that you want
FROM CTE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...