生成随机序列后插入数据的有效方法
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
我使用以下查询随机 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