更新 select 查询返回的总行数的 25%
update 25 % of total rows returned by a select query
我必须将数据插入包含列(第 1 列、第 2 列、第 3 列)的 table。
我有一个 select 查询 select 要插入到此 table 中的数据。
Select A.id, b.id , '1'
from table a
inner join table b on a.id=b.id
where a.col= 'somevalue'and b.col ='othervalue' ...
如果您注意到 select 语句中的第三列,我有一个硬编码值“1”。当前的要求是仅将总行的 25% 设置为“1”,其余 75% 设置为“0”。现在困难的部分是我们无法确定 select 语句会产生多少行。
我们还可以使用更新语句将 25% 的行更新为 1 并将其保留为“0”,但限制功能将不接受任何用户定义的变量。
任何人都可以对此提出建议吗?
我正在使用 MYSQL
使用子查询获取总行数。然后使用用户定义的变量获取输出中的行号,并将其与总数的 25% 进行比较。
SELECT a.id, b.id, IF(@counter < pct25, '1', '0'), @counter := @counter + 1
FROM table1 a
JOIN table2 b ON a.id = b.id
JOIN (SELECT COUNT(*)/25 AS pct25
FROM table1 a
JOIN table2 b ON a.id = b.id) AS x
CROSS JOIN (SELECT @counter := 0) AS var
插入数据时table,保留行号,取模:
insert into . . .
select a_id, b_id, (mod(rn, 4) = 0) as flag
from (Select A.id as a_id, b.id as b_id , (@rn := @rn + 1) as rn
from table a inner join
table b
on a.id = b.id cross join
(select @rn := 0) vars
where a.col = 'somevalue' and b.col = 'othervalue' ...
) i;
每四行取一次的一个很好的特点是它工作得很好,即使由于 join
.
数据以某种方式排序也是如此
我必须将数据插入包含列(第 1 列、第 2 列、第 3 列)的 table。
我有一个 select 查询 select 要插入到此 table 中的数据。
Select A.id, b.id , '1'
from table a
inner join table b on a.id=b.id
where a.col= 'somevalue'and b.col ='othervalue' ...
如果您注意到 select 语句中的第三列,我有一个硬编码值“1”。当前的要求是仅将总行的 25% 设置为“1”,其余 75% 设置为“0”。现在困难的部分是我们无法确定 select 语句会产生多少行。 我们还可以使用更新语句将 25% 的行更新为 1 并将其保留为“0”,但限制功能将不接受任何用户定义的变量。
任何人都可以对此提出建议吗?
我正在使用 MYSQL
使用子查询获取总行数。然后使用用户定义的变量获取输出中的行号,并将其与总数的 25% 进行比较。
SELECT a.id, b.id, IF(@counter < pct25, '1', '0'), @counter := @counter + 1
FROM table1 a
JOIN table2 b ON a.id = b.id
JOIN (SELECT COUNT(*)/25 AS pct25
FROM table1 a
JOIN table2 b ON a.id = b.id) AS x
CROSS JOIN (SELECT @counter := 0) AS var
插入数据时table,保留行号,取模:
insert into . . .
select a_id, b_id, (mod(rn, 4) = 0) as flag
from (Select A.id as a_id, b.id as b_id , (@rn := @rn + 1) as rn
from table a inner join
table b
on a.id = b.id cross join
(select @rn := 0) vars
where a.col = 'somevalue' and b.col = 'othervalue' ...
) i;
每四行取一次的一个很好的特点是它工作得很好,即使由于 join
.