0

我正在尝试填写表格 tbl_matrix。第一行包含唯一 ID。第一列包含唯一的邮政编码(5 个整数)。

另一个表 tbl_list 包含三列:'zip_code'、'id'、'occurrence'(大约 300000 行)。

现在我想用一个算法/循环来更新/填充 tbl_matrix,该算法/循环检查 tbl_list 是否包含邮政编码和 ID 的组合,并将出现的情况返回给 tbl_matrix。在某些情况下,该列表包含两个或多个相同的 zip_code 和 ID 组合,但出现次数不同。在这种情况下,应将出现次数相加。

我在 Windows 机器上使用 MySQL Workbench,但我没有使用 Perl/Python/PHP 的经验,因此仅在 MySQL 中解决问题会很棒。

在 Excel 中,我会在 tbl_matrix 中的每列使用一个 vlookup 函数,但直到现在我无法从 stackoverflow 中调整其他类似的(My)SQL 示例。如果你能帮助我,那就太好了(这是一个大学项目)。非常感谢你,拉斯。

4

2 回答 2

0

如果我理解正确,您要做的是使用 MySQL 创建一个动态数据透视表(动态的,因为您不想手动定义列,而是让它们从其他来源生成,在这种情况下是唯一的邮政编码)。见这里

另请注意,在 Excel 中,第一行是唯一的邮政编码是有意义的,因为您无法更改列名(A、B、C 等)。然而,在 SQL 中,列名可以而且应该是唯一的邮政编码,因此不需要第一行邮政编码。

于 2015-09-03T10:52:11.393 回答
0

我认为这可能是解决问题的一种方法

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 |

sqlfiddle 上的演示

于 2015-09-03T11:20:49.197 回答