可能的2个值的唯一组合5种不同的方式

x759pob2  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(380)

这是如此简单,但我不知道什么是最好的方法来计算这个,我是新的数据编程。我有一个由5列和2个值y和n组成的表。如何获得行中y和n的所有唯一可能组合?这可以是任意两个值,但我使用的是y和n。截图和视觉下面的我试图用手做这个。

YYYYY
NNNNN
YNYNY
NYNYN
NYYYY
NNYYY
NNNYY
NNNNY
iklwldmw

iklwldmw1#

我会使用五行源的交叉连接。

SELECT t1.custom1
     , t2.custom2
     , t3.custom3
     , t4.custom4
     , t5.custom5
  FROM ( SELECT 'Y' AS custom1 UNION ALL SELECT 'N' ) t1 
 CROSS
  JOIN ( SELECT 'Y' AS custom2 UNION ALL SELECT 'N' ) t2 
 CROSS
  JOIN ( SELECT 'Y' AS custom3 UNION ALL SELECT 'N' ) t3 
 CROSS
  JOIN ( SELECT 'Y' AS custom4 UNION ALL SELECT 'N' ) t4 
 CROSS
  JOIN ( SELECT 'Y' AS custom5 UNION ALL SELECT 'N' ) t5 
 ORDER
    BY t1.custom1 DESC
     , t2.custom2 DESC
     , t3.custom3 DESC
     , t4.custom4 DESC
     , t5.custom5 DESC
o4tp2gmn

o4tp2gmn2#

从一个简单的问题开始。零y或n有多少个独特的组合?只有一个:不包含元素的组合。
一个y或n有多少个独特的组合?有两种:

N Y

两个y或n有多少独特的组合?有四种:

NN NY YN YY

三个?共有八种:

NNN NNY NYN NYY YNN YNY YYN YYY

0有1,1有2,2有4,3有8。。。你现在应该已经猜到了有两对k的组合。
我们通过以下算法从旧组合中形成新组合:
如果元素为零,则结果为空列表。
如果k>0个元素,请列出k-1个元素。”将列表加倍,并用n或y扩展每一对。
如果最后一个例子不清楚,我们再来看3。我们从解决2的问题开始:

NN NY YN YY

然后我们加倍

NN NN NY NY YN YN YY YY

然后我们加上n,y,n,y,n,y,n,y得到

NNN NNY NYN NYY YNN YNY YYN YYY

在数据语言中,这个操作是序列本身的笛卡尔积。它也被称为“交叉连接”,因为它在代数中用x交叉表示。这是 {N,Y} x {N,Y} x {N,Y} x {N,Y} x {N,Y} .
练习:对于一个包含三个元素的序列,{a,b,c},你会怎么做呢?有多少k元素的组合?
练习:有多少种方法可以订购10个y或N,每个y或N正好有5个?你将如何产生这些组合?再一次,从一个简单的问题开始,用理性的方法解决更难的问题。
进一步阅读:如果您对如何在c中进行这些操作感兴趣,那么多年来我已经写了很多关于它们的文章:
https://ericlippert.com/2010/06/28/computing-a-cartesian-product-with-linq/
https://ericlippert.com/2013/04/15/producing-permutations-part-one/
https://ericlippert.com/2014/10/13/producing-combinations-part-one/

相关问题