SQL根据ID将一个表分成两个表

时间:2020-04-15 16:49:54

标签: sql

我有一个SQL表,其中包含一个ID列和一个交互列。 我想创建两个具有每个ID的新SQL表,但我想将交互分成两半。因此,两个新表都将具有旧表中的每个ID。例如,对于ID 1,交互10231232202将进入一个表,交互890890834939将进入另一表。我忽略了互动少于10次的实例。 我到底该怎么做?

╔════╦═══════════════╗
║ ID ║  Interaction  ║
╠════╬═══════════════╣
║  1 ║ 10231232202   ║ 
║  1 ║ 890890834939  ║ 
║  3 ║ 329489023849  ║
║  5 ║ 345453202389  ║
║  3 ║ 012340382448  ║ 
╚════╩═══════════════╝

预期结果

新表1

╔════╦═══════════════╗
║ ID ║  Interaction  ║
╠════╬═══════════════╣
║  1 ║ 10231232202   ║
║  5 ║ 345453202389  ║ 
║  1 ║ 890890834939  ║ 
╚════╩═══════════════╝ 

新表2

╔════╦═══════════════╗
║ ID ║  Interaction  ║
╠════╬═══════════════╣
║  3 ║ 329489023849  ║  
║  3 ║ 012340382448  ║ 
╚════╩═══════════════╝   

1 个答案:

答案 0 :(得分:0)

您可以生成一个列,其拆分方式为:

select t.*,
       row_number() over (partition by id order by interaction) % 2 as which_file
from t;

请注意,它对模运算符使用%。在某些数据库中,其拼写为mod()mod(作为中缀运算符)。

将数据放入单独的表中需要额外的工作-取决于数据库。