gpt4 book ai didi

mysql - 使用 LOAD FILE 时对重复项的值求和

转载 作者:行者123 更新时间:2023-11-29 13:55:55 24 4
gpt4 key购买 nike

我有一张 table :

| foo | bar |
+-----+-----+
| abc | 4 |
| def | 1 |
| ghi | 2 |

foo 具有唯一索引。
我想将一个文件加载到此表中,按 foo 列对重复项的 bar 值求和:

abc \t 7
ghi \t 3
jkl \t 4

有没有办法在加载数据期间对重复行中的值进行求和
此命令替换连续的旧值:

LOAD DATA LOCAL INFILE 'file.txt' REPLACE
INTO TABLE `table` FIELDS TERMINATED BY '\t' (`foo`,`bar`);

我想要一个这样的表:

| foo | bar |
+-----+-----+
| abc | 11 |
| def | 1 |
| ghi | 5 |
| jkl | 4 |

最佳答案

没有直接的方法来实现你想要的,因为记录的来源来自文件而不是表。按照以下步骤插入新行或更新现有行。

  • 创建一个临时表作为记录的临时目标表。
  • 将记录加载到临时表中,假设新表名为 TempTable 并具有两列:foobar

表创建ddl:

CREATE TABLE TempTable
(
foo VARCHAR(30),
bar INT
);

LOAD DATA LOCAL INFILE 'file.txt'
REPLACE INTO TABLE TempTable
FIELDS TERMINATED BY '\t' (`foo`,`bar`);
  • 加载记录后,我们开始合并记录。 MySQL 实现了一项名为 INSERT...ON DUPLICATE UPDATE 的功能,该功能基本上会插入新记录,但如果该记录与现有键冲突,则会更新该记录。应该首先定义 key 但在您的情况下,您可以直接执行该语句,因为您已经提到 foo 已经是唯一的。

使用INSERT INTO...SELECT,您可以组合INSERT..ON DUPLICATE UPDATE

INSERT INTO YourExistingTable (Foo, Bar) 
SELECT Foo, Bar
FROM TempTable
ON DUPLICATE KEY UPDATE Bar = VALUES(Bar) + Bar;
  • 执行该语句后,记录将被合并。您现在可以删除临时表。

删除临时表,

DROP TABLE TempTable

关于mysql - 使用 LOAD FILE 时对重复项的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15871335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com