返回求和列的所有排列的SQL
这是在黑暗中拍摄的。我个人很难想出一个简单的SQL语句来完成以下任务,如果可以的话,所以我想我应该在这里抛开它: 假设我们有以下数据:返回求和列的所有排列的SQL,sql,sql-server,Sql,Sql Server,这是在黑暗中拍摄的。我个人很难想出一个简单的SQL语句来完成以下任务,如果可以的话,所以我想我应该在这里抛开它: 假设我们有以下数据: ID VALUE -- ----- 1 60 2 60 3 60 4 60 我想找到总数为120的所有排列记录。也就是说,结果将是6行: 1 AND 2 1 AND 3 1 AND 4 --2 AND 1 (already used) 2 AND 3 2 AND 4 --3 AND 1 (already used) --3 AND 2 (already
ID VALUE
-- -----
1 60
2 60
3 60
4 60
我想找到总数为120的所有排列记录。也就是说,结果将是6行:
1 AND 2
1 AND 3
1 AND 4
--2 AND 1 (already used)
2 AND 3
2 AND 4
--3 AND 1 (already used)
--3 AND 2 (already used)
3 AND 4
他们实际上想要对结果集进行随机抽样,但我需要知道我是否能得到结果集。当然,真正的数据并不是那么容易,问题是10条记录加起来有5分钟。这个字段是一个持续时间字段,这导致了关于如何处理它的其他问题,但让我看看我是否可以在实际变得更复杂之前先从排列开始
谢谢。这些是组合,不是排列。如果需要所有双向组合,请使用自连接:
select l.id, r.id, l.value+r.value as sum
from t l
inner join t r
on l.id < r.id
where l.value+r.value = 120
order by l.id, r.id
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and
t1.value + t2.value = 60;
对于约10%的随机样本,您可以使用:
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and
t1.value + t2.value = 60
where rand() < 0.1;
这些是组合,而不是排列。如果需要所有双向组合,请使用自连接:
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and
t1.value + t2.value = 60;
对于约10%的随机样本,您可以使用:
select t1.*, t2.*
from t t1 join
t t2
on t1.id < t2.id and
t1.value + t2.value = 60
where rand() < 0.1;
表T值
ID VALUE
-- -----
1 60
2 60
3 60
4 60
Select A.ID, B.ID from TValues A
join TValues B on B.ID != A.ID
where
(A.Value+B.Value) = 120
and
A.ID < B.ID -- eliminates dups, if (1,3) is printed, (3,1 will not be printed)
表T值
ID VALUE
-- -----
1 60
2 60
3 60
4 60
Select A.ID, B.ID from TValues A
join TValues B on B.ID != A.ID
where
(A.Value+B.Value) = 120
and
A.ID < B.ID -- eliminates dups, if (1,3) is printed, (3,1 will not be printed)
看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分@仅仅看10个方向的组合是一个完全不同的问题。你应该为此发布一个新问题。是的,我正在考虑。嗯,看起来我问题的第一部分可以很容易地解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分@仅仅看10个方向的组合是一个完全不同的问题。你应该为此发布一个新问题。是的,我正在考虑。嗯,看起来我问题的第一部分可以很容易地解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!看来我问题的第一部分很容易解决!现在,如果我想要10路组合?在许多记录上,超过120英镑?我把你的答案投了赞成票。你们都来得这么快,还不知道谁也该打绿色的勾。尽管如此,我还是希望这次投票也能让你获得声誉积分!你的数据库管理系统是什么?关系型的?你的数据库管理系统是什么?关系数据库?SQL Server。