sql 排列组合_排列组合SQL

排列:Permutation / Arrangement,数学符号A/P。表示从 n 个人中,有顺序地抽出 m 个人的抽法数。

组合:Combination,数学符号C。表示从 n 个人中,不计顺序地抽出 m 个人的抽法数。

6edbfd31b19c0d71cb828a38b7949a31.png

1.测试数据查询

SELECT emplid 

 , start_dt 

  FROM ps_PRIORWORK_EXPER

where emplid='测试IDXX'

  总共7行数据

1372591bf68e8bdfde990e996c86c94f.png

2.A7中取2=7*6=42,结果应当返回42行的排列。

sql查询:

SELECT  a.emplid 

,A.seqno

 , a.start_dt  

,B.seqno

 , b.start_dt 

  FROM ( 

 SELECT rownum AS seqno 

 , x.* 

  FROM ( 

 SELECT emplid 

 , start_dt 

  FROM ps_PRIORWORK_EXPER

where emplid='测试IDXX'

  ORDER BY emplid) x) a 

  , ( 

 SELECT rownum AS seqno 

 , y.* 

  FROM ( 

 SELECT emplid 

 , start_dt 

  FROM ps_PRIORWORK_EXPER 

    where emplid='测试IDXX'

  ORDER BY emplid) y) b 

 WHERE a.emplid = b.emplid 

   AND a.seqno <> b.seqno

总共42行排列。

5dd1f623133bd73acfbeea70eb163caa.png

3.C7中取2=7*6/2=21,,结果应当返回21行的组合。

sql查询:

SELECT  a.emplid 

,A.seqno

 , a.start_dt  

,B.seqno

 , b.start_dt 

  FROM ( 

 SELECT rownum AS seqno 

 , x.* 

  FROM ( 

 SELECT emplid 

 , start_dt 

  FROM ps_PRIORWORK_EXPER

where emplid='测试IDXX'

  ORDER BY emplid) x) a 

  , ( 

 SELECT rownum AS seqno 

 , y.* 

  FROM ( 

 SELECT emplid 

 , start_dt 

  FROM ps_PRIORWORK_EXPER 

    where emplid='测试IDXX'

  ORDER BY emplid) y) b 

 WHERE a.emplid = b.emplid 

   AND a.seqno

总共21行组合

1887ea8802270f2ac1f13fcf32514801.png

字数不足字数不足字数不足字数不足字数不足字数不足字数不足字数不足字数不足

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL 中,可以使用自连接(self-join)和交叉连接(cross-join)等技术来实现排列组合。以下是一些示例: 1. 排列 排列是指从给定的 n 个元素中,取出 m 个元素进行排列,有序排列,且每个元素只能使用一次。排列的总数为n!/(n-m)!。 假设有一个名为`items`的表,其中包含一列`name`,表示要进行排列的元素。如果要从`items`中选择3个元素进行排列,可以使用以下查询: ``` SELECT a.name, b.name, c.name FROM items a, items b, items c WHERE a.name <> b.name AND a.name <> c.name AND b.name <> c.name; ``` 在这个查询中,我们对`items`表进行了三次自连接,每个连接使用不同的别名(a、b、c)。然后使用`WHERE`子句来过滤掉重复的元素,以确保每个元素只使用一次。 2. 组合 组合是指从给定的 n 个元素中,取出 m 个元素进行组合,无序组合,且每个元素只能使用一次。组合的总数为n!/m!(n-m)!。 假设有一个名为`items`的表,其中包含一列`name`,表示要进行组合的元素。如果要从`items`中选择3个元素进行组合,可以使用以下查询: ``` SELECT a.name, b.name, c.name FROM items a, items b, items c WHERE a.name < b.name AND b.name < c.name; ``` 在这个查询中,我们对`items`表进行了三次自连接,每个连接使用不同的别名(a、b、c)。然后使用`WHERE`子句来过滤掉重复的元素,以确保每个元素只使用一次并且结果是无序的。 需要注意的是,在实际应用中,排列组合通常需要考虑更多的因素,例如元素可能是重复的,或者需要保证结果是有序的。这些因素将影响查询的编写方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值