高级农民
- 积分
- 1314
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2013-10-8
- 最后登录
- 1970-1-1
|
我大概写了一下: .google и
如果原始table是这样:. From 1point 3acres bbs
INSERT INTO A. 1point3acres.com
([id], [sales], [color], [brand])
VALUES
(1, 10, 'red', 'Nike'),
(2, 20, 'blue', 'adidas'),
(3, 30, 'black', 'Nike'),
(4, 23, 'green', 'Nike'),
(6, 15, 'white', 'Adidas');
然后我这样写用了cross join(笛卡尔积, 我是想的距离的话应该是两两id都有距离, 所以就是5*5 = 25 行这样join, 每个id都要跟别的id算一次距离, 虽然这样做会有重复。 我之前想的是用lag function, 但是后来反应过来那么算不对),和case when 计算额外的三个difference column, 然后再根据这三个新的column 计算欧几里得距离。 . Χ
select table1.id, table1.sales,
table2.id as id_copy, table2.sales as sales_copy,
case
when table1.id = table2.id then 0
else ABS(table1.sales - table2.sales)
end as sales_diff,
. Waral dи,
case. 1point3acres
when table1.color = table2.color then 0
else 1
end as color_diff,
case
when table1.brand = table2.brand then 0
else 1
end as brand_diff
from A table1
cross join A table2
得到的结果这样:(忽略排版). 1point 3 acres
id| sales| id_copy| sales_copy| sales_diff| color_diff| brand_diff
1 10 1 10 0 0 0
2 20 1 10 10 1 1
3 30 1 10 20 1 0
4 23 1 10 13 1 0
6 15 1 10 5 1 1
1 10 2 20 10 1 1.
2 20 2 20 0 0 0
3 30 2 20 10 1 1
4 23 2 20 3 1 1
6 15 2 20 5 1 0
1 10 3 30 20 1 0. 1point3acres.com
2 20 3 30 10 1 1. Χ
3 30 3 30 0 0 0
4 23 3 30 7 1 0. 1point3acres.com
6 15 3 30 15 1 1. 1point 3acres
1 10 4 23 13 1 0 ..
2 20 4 23 3 1 1-baidu 1point3acres
3 30 4 23 7 1 0
4 23 4 23 0 0 0
6 15 4 23 8 1 1
1 10 6 15 5 1 1
2 20 6 15 5 1 0
3 30 6 15 15 1 1
4 23 6 15 8 1 1
6 15 6 15 0 0 0
. From 1point 3acres bbs
差不多是个意思吗? |
|