生成随机序列后插入数据的有效方法

Efficient way to Insert the data after generating random sequence

我使用以下查询随机 select 10% 的 ID (MYSQL(版本 MySQL 8.0))

select id from
(WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) rn, COUNT(*) OVER () cnt
    FROM table1
    where submitted between date_sub(now(),INTERVAL 1 WEEK) and now()
)
SELECT *
FROM cte
WHERE rn < 0.1 * cnt
) as tt;

生成的样本 ID: 编号: 4个 7 8个 9

现在,我想将 selected ID 插入汤姆、迪克和哈利

我可以这样写 Insert 语句:

INSERT INTO table2 (ID,analystName)
select id, 'Tom' from
(WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) rn, COUNT(*) OVER () cnt
    FROM table1
    where submitted between date_sub(now(),INTERVAL 1 WEEK) and now()
)
SELECT *
FROM cte
WHERE rn < 0.1 * cnt
) as tt;

但是,我不能再次使用 SQL 为 'Dick' 和 'Harry' 插入它,因为生成的 ID 会有所不同。 有没有一种有效的方法可以在单个 INSERT 语句中插入三个人的数据?

我希望最终结果是:

IDs AnalystName
4    Tom
7    Tom
8    Tom
9    Tom
4    Dick
7    Dick
8    Dick
9    Dick
4    Harry
7    Harry
8    Harry
9    Harry

要插入此数据的表 2 没有用于过滤数据的数据字段,并且此插入将是每周一次的练习,以便为这三个用户分配相同的随机 ID。

INSERT INTO
  table2 (
    ID,
    analystName
  )
WITH
  sample
AS
(
  SELECT *, ROW_NUMBER() OVER (ORDER BY RAND()) rn, COUNT(*) OVER () cnt
    FROM table1
   WHERE submitted BETWEEN DATE_SUB(now(),INTERVAL 1 WEEK) AND now()
),
  analyst(name)
AS
(
            SELECT 'tom'
  UNION ALL SELECT 'dick'
  UNION ALL SELECT 'harry'
)
SELECT
  sample.id,
  analyst.name
FROM
  sample
CROSS JOIN
  analyst
WHERE
  sample.rn < sample.cnt * 0.1