我的表格包含以下4维列和1个度量列Col1
,Col2
,Col3
,Col4
,度量
维度列的基数分别为a
,b
,c
,d
。
在我的应用程序中,用户可以在每列中选择任意数量的值,即多选,我需要运行查询以查找该组合的总测量值。
因此理论上,在最坏的情况下,最大可能组合数为(2^a-1) * (2^b-1) * (2^c-1) * (2*d-1)
。
现在我想知道我的真实数据集中可能有多少实际组合,我认为这些组合会少得多,因为在现实生活中并非所有组合都是可能的。
是否有一些SQL查询或任何其他方式(使用C#可能)从实际数据中确定此数字?
我的文件为.csv
,也在我的SQL服务器数据库中。
这是ex:for for two dimension columns
用户,行动,请求
U1,A1,10
U1,A2,5
U2,A3,4
理论上的最大组合可能是: (2 ^ 2)*(2 ^ 3)= 4 * 8 = 32
但实际上,可能的组合只有10个
答案 0 :(得分:0)
如果您拥有每列的不同值的数量(称为nA
,nB
,nC
,nD
),则可能的选择总数为2^nA * 2^nB * 2^nC * 2^nD
。每列2^n
(而非2^n - 1
),因为每个不同的值都有2个状态(已选中或未选中)。您可以将其视为长度为n的二进制字符串。
您可以通过多种方法确定每列的不同值的数量。
您可以查询数据库本身
SELECT count(sub.colA) FROM (SELECT DISTINCT colA FROM Table) as sub
从csv文件中读取数据后,您可以查询程序存储器中已有的数据(例如LINQ)
int nA = docs.GroupBy(x => x.colA).Count();
一旦掌握了所有数字,只需取幂并乘以。为避免溢出,您可以查看BigInteger等内容。