Генерация шаблона с использованием SQL - PullRequest
0 голосов
/ 27 марта 2019

У меня есть таблица с одним столбцом с номерами 1-100.Хотите сгенерировать вывод, где каждое число N повторяется N раз (поэтому 5 должно появляться 5 раз):

1
2
2
3
3
3
4
4
4
4
and so on

Ответы [ 3 ]

0 голосов
/ 27 марта 2019

Для MySql 5.x

Создать таблицу подсчета с положительными числами, включая 0.

Затем самостоятельно присоединитесь к этой таблице номеров.

select n1.n as num
from nums as n1
join nums as n2 on n2.n < n1.n
where n1.n between 1 and 100
order by n1.n;

Пример создания такой таблицы номеров:

CREATE TABLE digits (n int primary key not null);

insert into digits (n) values 
(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

CREATE TABLE nums (n int primary key not null);

-- fill with numbers 0 to 999
INSERT INTO nums (n)
SELECT (d3.n*100 + d2.n*10 + d1.n) as num
FROM digits d1
CROSS JOIN digits d2
CROSS JOIN digits d3;

В MySql 8 вместо него можно использовать рекурсивный CTE

WITH RECURSIVE NUMS AS 
(
  SELECT 0 as n

  UNION ALL

  SELECT n+1
  FROM NUMS
  WHERE n < 100
)
SELECT n1.n
FROM NUMS n1
JOIN NUMS n2 ON n2.n < n1.n
ORDER BY n1.n;
0 голосов
/ 27 марта 2019

Если у вас есть таблица с числами, используйте ее в самостоятельном соединении:

select n.n
from numbers n join
     numbers n2
     on n2.n <= n.n
order by n.n;

Здесь - пример скрипты db <>.

0 голосов
/ 27 марта 2019

Для mysql версий до 8.0,

create table _set(n int);

insert into _set(n) values (1), (2), (3), (4), (5), (6); -- this goes on

select s2.* from _set as s
  join _set as s2 on s.n <= s2.n;

Временные таблицы не могут быть открыты дважды задокументированная проблема .

Для mysql версий 8.0, попробуйте это,

with _set as (select 1 as n 
            union all
            select n+1 as n from _set
            where n < 100
            )
select s2.* from _set s
    join _set s2 on s.n <= s2.n
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...