我对SQL很新,我希望有一个生成5个唯一数字的列。就像一个id列,除了我希望得到5个随机顺序且对于该列唯一的数字
示例:
56829
73591
17469
46290
我确实有一个自动增量和唯一的id列,但现在我需要另一个独特的列并将生成5位数,我有点看了这个,显然有一个uniqueidentifier列类型,我有文档它,但我不确定它是否正在寻找......请帮助!
答案 0 :(得分:5)
也许伪随机数就足够了。你可以这样做:
alter table t
add id5 as ( (id * 19379 + 62327) % 99991)
这些数字只是小于100,000的任意素数。因为它们是素数,所以数字不应重复1到99991之间的值。
编辑:
对于素数来说,这很容易证明。假设id1和id2具有相同的值:
(id1 * 19379 + 62327) % 99991) = n
(id2 * 19379 + 62327) % 99991) = n
然后减去它们:
(id1 - id2) * 19379 % 99991 = 0
不可否认,此时你需要一些数论。但是,只要说两个素数(19,379和99,991)没有共同的除数就足够了。因此,唯一的方法是id1 - id2
是99,991的倍数。
(从技术上讲,你可以做的是除以19,379,因为它的逆是明确定义的。反函数在模运算中并不总是很明确,但是当它们被除法时是允许的。)
后一种情况是说这些数字不重复的奇特方式。
编辑:
如果您想要5个数字,那么您可以使用% 89989
并在结果中添加10,000个。
答案 1 :(得分:1)
我从未真正以这种方式使用过UNIQUEIDENTIFIER,所以我可能会得到纠正。这样,您应该能够创建唯一的GUID作为行的自动生成唯一ID。
from sklearn import preprocessing
from sklearn.linear_model import LogisticRegression
from sklearn import svm
scaler = preprocessing.StandardScaler()
scaler.fit(synthetic_data)
synthetic_data = scaler.transform(synthetic_data)
test_data = scaler.transform(test_data)
svc = svm.SVC(tol=0.0001, C=100.0).fit(synthetic_data, synthetic_label)
predictedSVM = svc.predict(test_data)
print(accuracy_score(test_label, predictedSVM))
LRmodel = LogisticRegression(penalty='l2', tol=0.0001, C=100.0, random_state=1,max_iter=1000, n_jobs=-1)
predictedLR = LRmodel.fit(synthetic_data, synthetic_label).predict(test_data)
print(accuracy_score(test_label, predictedLR))