SQL服务器:根据价格列创建新列类别价格
SQL Server : create new column category price according to price column
我有一个 SQL 服务器 table,其列 price
如下所示:
10
96
64
38
32
103
74
32
67
103
55
28
30
110
79
91
16
71
36
106
89
87
59
41
56
89
68
32
80
47
45
77
64
93
17
88
13
19
83
12
76
99
104
65
83
95
现在我的目标是创建一个新列,为每个值提供 1 到 10 的类别。
例如,我列中的最大值是 110,最小值是 10。Max-min = 100。然后如果我想要 10 个类别,我会做 100/10= 10。因此这里是范围:
10-20 1
21-30 2
31-40 3
41-50 4
51-60 5
61-70 6
71-80 7
81-90 8
91-100 9
101-110 10
期望输出:
我的名为 cat
的新专栏应该如下所示:
price cat
-----------------
10 1
96 9
64 6
38 3
32 3
103 10
74 7
32 3
67 6
103 10
55 5
28 2
30 3
110 10
79 7
91 9
16 1
71 7
36 3
106 10
89 8
87 8
59 5
41 4
56 5
89 8
68 6
32 3
80 7
47 4
45 4
77 7
64 6
93 9
17 1
88 8
13 1
19 1
83 8
12 1
76 7
99 9
104 10
65 6
83 8
95 9
有没有办法用 T-SQL 执行此操作?对不起,如果这个问题可能太简单了。我在网上搜索了很久。所以要么问题没有我想象的那么简单。要么我输入了错误的关键字。
是的 - case 语句可以做到这一点。
select
price
,case
when price between 10 and 20 then 1
when price between 21 and 30 then 2
when price between 31 and 40 then 3
when price between 41 and 50 then 4
when price between 51 and 60 then 5
when price between 61 and 70 then 6
when price between 71 and 80 then 7
when price between 81 and 90 then 8
when price between 91 and 100 then 9
when price between 101 and 110 then 10
else null
end as cat
from [<enter your table name here>]
是的,几乎与您描述的计算完全一样:
select price,
1 + (price - min_price) * 10 / (max_price - min_price + 1) as decile
from (select price,
min(price) over () as min_price,
max(price) over () as max_price
from t
) t;
1 +
是因为你想要的值是从 1 到 10,而不是 0 到 9。
我有一个 SQL 服务器 table,其列 price
如下所示:
10
96
64
38
32
103
74
32
67
103
55
28
30
110
79
91
16
71
36
106
89
87
59
41
56
89
68
32
80
47
45
77
64
93
17
88
13
19
83
12
76
99
104
65
83
95
现在我的目标是创建一个新列,为每个值提供 1 到 10 的类别。
例如,我列中的最大值是 110,最小值是 10。Max-min = 100。然后如果我想要 10 个类别,我会做 100/10= 10。因此这里是范围:
10-20 1
21-30 2
31-40 3
41-50 4
51-60 5
61-70 6
71-80 7
81-90 8
91-100 9
101-110 10
期望输出:
我的名为 cat
的新专栏应该如下所示:
price cat
-----------------
10 1
96 9
64 6
38 3
32 3
103 10
74 7
32 3
67 6
103 10
55 5
28 2
30 3
110 10
79 7
91 9
16 1
71 7
36 3
106 10
89 8
87 8
59 5
41 4
56 5
89 8
68 6
32 3
80 7
47 4
45 4
77 7
64 6
93 9
17 1
88 8
13 1
19 1
83 8
12 1
76 7
99 9
104 10
65 6
83 8
95 9
有没有办法用 T-SQL 执行此操作?对不起,如果这个问题可能太简单了。我在网上搜索了很久。所以要么问题没有我想象的那么简单。要么我输入了错误的关键字。
是的 - case 语句可以做到这一点。
select
price
,case
when price between 10 and 20 then 1
when price between 21 and 30 then 2
when price between 31 and 40 then 3
when price between 41 and 50 then 4
when price between 51 and 60 then 5
when price between 61 and 70 then 6
when price between 71 and 80 then 7
when price between 81 and 90 then 8
when price between 91 and 100 then 9
when price between 101 and 110 then 10
else null
end as cat
from [<enter your table name here>]
是的,几乎与您描述的计算完全一样:
select price,
1 + (price - min_price) * 10 / (max_price - min_price + 1) as decile
from (select price,
min(price) over () as min_price,
max(price) over () as max_price
from t
) t;
1 +
是因为你想要的值是从 1 到 10,而不是 0 到 9。