我试图规范化某些数据,似乎无法提出解决方案。我所拥有的是这样一张桌子:
weight position1 position2 position3
1 10 20 30
2 25 35 45
3 17 05 22
和这样的一个:
location position
6 1
7 1
8 2
9 2
10 2
11 3
12 3
如何规范上述内容以便给定位置和权重,我可以找到给定位置的值?
我可以使用Perl,Python,Excel,MySQL或几乎任何块上的工具来进行数据的实际重组;我遇到问题的地方在于提出合理的架构。
这里想要的结果是
if location == 11 -> position is 3
因此,
if weight == 2 -> the value is 45
答案 0 :(得分:1)
唯一要做的是" unpivot"你的第一个表格:
weight position value
1 1 10
1 2 20
1 3 30
2 1 25
2 2 35
2 3 45
3 1 17
3 2 05
3 3 22
前两列应包含唯一的值对。如果您有其他信息仅取决于体重,那么您需要另一张桌子。职位相同。
如果您已有表,则可以使用以下语句创建第一个表(t1):
create table t1_new
select weight, 1 as position, position1 as value
from t1
union all
select weight, 2 as position, position2 as value
from t1
union all
select weight, 3 as position, position3 as value
from t1
然后,在验证结果后,删除t1,并将t1_new重命名为t1。
要从这些表中查询给定位置和重量的值,您应该使用连接:
select value
from t1
inner join t2 on t2.weight = t1.weight
where t2.location = 11
and t1.position = 3