MySQL: Matching/filling 包含邮政编码和 ID 列表的矩阵
MySQL: Matching/filling a matrix with a list of ZIP Codes and IDs
我正在尝试填写 table tbl_matrix。第一行包含唯一 ID。第一列包含唯一的邮政编码(5 个整数)。
另一个 table tbl_list 包含三列:'zip_code'、'id'、'occurrence'(大约 300000 行)。
现在我想 update/fill tbl_matrix 使用 algorithm/loop 检查 tbl_list 是否包含邮政编码和 ID 的组合以及 returns发生到 tbl_matrix。在某些情况下,该列表包含两个或多个相同的 zip_code 和 ID 组合,但出现次数不同。在这种情况下,出现次数应该加起来。
我在 Windows 机器上使用 MySQL Workbench,我没有使用 Perl/Python/PHP 的经验,所以单独解决这个问题会很好在 MySQL.
在 Excel 中,我会在 tbl_matrix 中对每列使用一个 vlookup 函数,但直到现在我还无法从 Whosebug 中改编其他类似的 (My)SQL 示例。如果你能帮助我(这是一个大学项目),那就太好了。
非常感谢,拉尔斯。
如果我理解正确,你要做的是使用 MySQL 创建一个 动态枢轴 table(动态因为你不想要手动定义列,而是让它们从其他来源生成,在本例中是唯一的邮政编码)。参见 here。
另请注意,在 Excel 中,第一行是唯一的邮政编码是有意义的,因为您无法更改列名(A、B、C 等)。然而,在 SQL 中,列名可以而且应该是唯一的邮政编码,因此不需要第一行邮政编码。
我认为这可能是解决问题的一种方法
create table thetable (id int, zip_code int, occurrence int);
insert into thetable values (1,1,1), (2,1,2), (1,2,3), (1,2,4);
select id,
sum(if(zip_code=1, sum, 0)) zip1,
sum(if(zip_code=2, sum, 0)) zip2
from
(select id, zip_code, sum(occurrence) sum
from tbl_list
group by id, zip_code
) t
group by id
结果
| id | zip1 | zip2 |
|----|------|------|
| 1 | 1 | 7 |
| 2 | 2 | 0 |
我正在尝试填写 table tbl_matrix。第一行包含唯一 ID。第一列包含唯一的邮政编码(5 个整数)。
另一个 table tbl_list 包含三列:'zip_code'、'id'、'occurrence'(大约 300000 行)。
现在我想 update/fill tbl_matrix 使用 algorithm/loop 检查 tbl_list 是否包含邮政编码和 ID 的组合以及 returns发生到 tbl_matrix。在某些情况下,该列表包含两个或多个相同的 zip_code 和 ID 组合,但出现次数不同。在这种情况下,出现次数应该加起来。
我在 Windows 机器上使用 MySQL Workbench,我没有使用 Perl/Python/PHP 的经验,所以单独解决这个问题会很好在 MySQL.
在 Excel 中,我会在 tbl_matrix 中对每列使用一个 vlookup 函数,但直到现在我还无法从 Whosebug 中改编其他类似的 (My)SQL 示例。如果你能帮助我(这是一个大学项目),那就太好了。 非常感谢,拉尔斯。
如果我理解正确,你要做的是使用 MySQL 创建一个 动态枢轴 table(动态因为你不想要手动定义列,而是让它们从其他来源生成,在本例中是唯一的邮政编码)。参见 here。
另请注意,在 Excel 中,第一行是唯一的邮政编码是有意义的,因为您无法更改列名(A、B、C 等)。然而,在 SQL 中,列名可以而且应该是唯一的邮政编码,因此不需要第一行邮政编码。
我认为这可能是解决问题的一种方法
create table thetable (id int, zip_code int, occurrence int);
insert into thetable values (1,1,1), (2,1,2), (1,2,3), (1,2,4);
select id,
sum(if(zip_code=1, sum, 0)) zip1,
sum(if(zip_code=2, sum, 0)) zip2
from
(select id, zip_code, sum(occurrence) sum
from tbl_list
group by id, zip_code
) t
group by id
结果
| id | zip1 | zip2 |
|----|------|------|
| 1 | 1 | 7 |
| 2 | 2 | 0 |