简体   繁体   English

使用 SQL 查询进行数据挖掘操​​作(模糊 Apriori 算法) - 使用 SQL 编码

[英]Data Mining Operation using SQL Query (Fuzzy Apriori Algorithm) - Coding it using SQL

So I have this Table:所以我有这张表:

Trans_ID    Name    Fuzzy_Value    Total_Item  
100          I1  0.33333333        3  
100          I2  0.33333333        3  
100          I5  0.33333333        3  
200          I2  0.5               2  
200          I5  0.5               2  
300          I2  0.5               2  
300          I3  0.5               2  
400          I1  0.33333333        3  
400          I2  0.33333333        3  
400          I4  0.33333333        3  
500          I1  0.5               2  
500          I3  0.5               2  
600          I2  0.5               2  
600          I3  0.5               2  
700          I1  0.5               2  
700          I3  0.5               2  
800          I1  0.25              4  
800          I2  0.25              4  
800          I3  0.25              4  
800          I5  0.25              4  
900          I1  0.33333333        3  
900          I2  0.33333333        3  
900          I3  0.33333333        3  
1000         I1  0.2               5  
1000         I2  0.2               5  
1000         I4  0.2               5  
1000         I6  0.2               5  
1000         I8  0.2               5  

And two blank Tables:还有两个空白表:

Table  ITEMSET
  
"ITEM_SET" "Support" 



Table Confidence
  
"ANTECEDENT" "CONSEQUENT" 

I need to find FUZZY value for each item that occurs in each transaction:我需要为每个事务中出现的每个项目找到 FUZZY 值:

I1 = Sum of (Fuzzy_Value from item I1 in trans 100 until 1000 which is trans: 100,400,500,700,800,900,1000)/Total Trans  
-> (.33333333+0.33333333+0.5+0.5+0.25+0.33333333+0.2)/10 = 0.244999999

  
I2 = Sum of (Fuzzy_Value from item I2 in trans 100 - 1000 which is trans:100,200,300,400,600,800,900,1000)/Total Trans  
-> (0.33333333+0.5+0.5+0.33333333+0.5+0.25+0.33333333)/10 = 0.274999999


I3 -> 0.258333333  
I4 -> 0.103333333  
I5 -> 0.058333333    
I6 -> 0.02    
I8 -> 0.02    

Eg, I use minimum Support 10% -> 0.1例如,我使用最低支持 10% -> 0.1
I need to remove I5,I6,I8 since it's value < 0.1 => prune step我需要删除 I5,I6,I8 因为它的值 < 0.1 =>修剪步骤

then store:然后存储:

I1=0.244999999, I2=0.274999999, I3=0.258333333,I4=0.103333333  on new table 'ITEMSET' 

2 COMBINATIONS 2 组合

NOTE: This is the basic 1st step after this most likely need to use repeat or recursive, since the process will keep going on until no other item combination is possible注意:这是最可能需要使用重复或递归之后的基本第一步,因为该过程将继续进行,直到不可能有其他项目组合
then from what's left I need to find K+1 itemset (which is 2 combination itemset) => join step然后从剩下的我需要找到 K+1 项集(这是 2 个组合项集)=>加入步骤

{I1,I2} =Sum of (Fuzzy_Value from item I1 + I2 in trans 100 - 1000 which is trans:100,400,800,900,1000)/Total Trans 
->(0.666666667+0.666666667+0.5+0.666666667+0.4)/9 = 0.29

*do the same for the rest*
{I1,I3} =(1+1+0.5+0.666666667)/9 = 0.316666667
{I1,I4} =(0.666666667+0.4)/9 = 0.106666667
{I2,I3} =(1+1+0.5+0.666666667)/9 = 0.316666667
{I2,I4} =(1+0.666666667+0.4)/9 =0.206666667
{I3,I4} =0  

Then Do another Prune Step removing less than 0.1 value which is {I3,I4}然后执行另一个修剪步骤,删除小于 0.1 的值 {I3,I4}

Store {I1,I2} = 0.29, {I1,I3} = 0.316666667, {I1,I4} =0.106666667, {I2,I3} = 0.316666667, {I2,I4} = 0.206666667  AT "ITEMSET" TABLE 

3 COMBINATION 3 组合

After that Do another JOIN STEP combining itemset that pass pruning之后做另一个JOIN STEP组合通过修剪的项目集

{I1,I2,I3} = Sum of (Fuzzy_Value from item I1 + I2 +I3 in trans 100 - 1000 which is trans:800,900)/Total Trans  
-> 0.75+1 = 0.175  
**Same for the rest**  
{I1,I2,I4} = 1+0.6 = 0.16  
{I2,I3,I4} = 0  

Do another Prune Step removing less than 0.1 value which is {I1,I3,I4}执行另一个修剪步骤,删除小于 0.1 的值,即 {I1,I3,I4}

Store {I1,I2,I3} = 0.176 AND {I1,I2,I4} = 0,16 AT "ITEMSET" TABLE  

4 COMBINATION 4 组合

Combine itemset that pass pruning K+4 (4 combination)通过剪枝K+4的组合项集(4个组合)

{I1,I2,I3,I4} = 0

**since no transaction containing this item **因为没有包含此项目的交易

after process stop since there's no possible combination left进程停止后,因为没有可能的组合


At this point, ITEMSET database have:此时,ITEMSET 数据库有:

ITEM_SET           Support  
{I1}               0.244999999
{I2}               0.274999999     
{I3}               0.258333333    
{I4}               0.103333333  
{I1,I2}            0.29    
{I1,I3}            0.316666667  
{I1,I4}            0.106666667  
{I2,I3}            0.316666667  
{I2,I4}            0.206666667  
{I1,I2,I3}         0.176  
{I1,I2,I4}         0,16  

How do I code that in sql?我如何在sql中编码? Thank you very much!非常感谢!

Note : You can add another table as needed.注意:您可以根据需要添加另一个表。

Step 1:步骤1:

CREATE TABLE ITEMSET
SELECT Name, SUM(Fuzzy_Value)/COUNT(*) Fuzzy_Value
FROM trans
GROUP BY ID
HAVING ROUND(SUM(Fuzzy_Value), 1) >= 0.1

Note the ROUND() function - it's important, because you have values like .33333 that don't sum in a happy way.请注意ROUND()函数 - 这很重要,因为您有像 .33333 这样的值不能以愉快的方式求和。

Step 2:第2步:

ALTER TABLE ITEMSET ADD INDEX (Name)

SELECT a.Name Name1, b.Name Name2, SUM(Fuzzy_Value)/COUNT(*) Fuzzy_Value
FROM ITEMSET a JOIN ITEMSET b ON (a.Name != b.Name)
GROUP BY a.Name, b.Name
HAVING ROUND(SUM(Fuzzy_Value), 1) >= 0.1

Opps: I just noticed that you asked this half a year ago, so I guess there is no point in continuing. Opps:我才注意到你半年前问过这个问题,所以我想没有必要继续下去了。 If you still need this answer leave a comment.如果您仍然需要此答案,请发表评论。

尝试以下链接使用汇总组合oracle doc

Here is a bit different approach to this question.对于这个问题,这里有一些不同的方法。 It differs because there is no writing to tables but giving final result that then can be written according to conditions into one or more tables.它有所不同,因为没有写入表,而是给出最终结果,然后可以根据条件将其写入一个或多个表中。 The first cte named "tbl" is just used for sample data creation.第一个名为“tbl”的 cte 仅用于创建示例数据。 The second one, "name_ids" is later used to generate different combinations of 2, 3 or more T_NAMEs (innermost query of step2, 3, 4) The third one, "id_names" serves as a filtering dataset for different combinations that are still active and that have at least one common T_ID All of the cte-s data are shown in the code along with the final result at the end.第二个,“name_ids”稍后用于生成 2、3 或更多 T_NAME 的不同组合(step2、3、4 的最内层查询) 第三个,“id_names”用作仍然活动的不同组合的过滤数据集并且至少有一个共同的 T_ID 所有的 cte-s 数据都显示在代码中以及最后的最终结果。
Tested with Oracle 11g使用 Oracle 11g 测试

WITH
    tbl AS
        (
            Select  100 "T_ID", 'I1' "T_NAME",      0.33333333 "FUZZY_VALUE",       3 "TOTAL_ITEM"      From DUAL  UNION ALL
            Select  100,        'I2',               0.33333333,                     3                   From Dual  UNION ALL
            Select  100,        'I5',               0.33333333,                     3                   From Dual  UNION ALL
            Select  200,        'I2',               0.5,                            2                   From Dual  UNION ALL
            Select  200,        'I5',               0.5,                            2                   From Dual  UNION ALL
            Select  300,        'I2',               0.5,                            2                   From Dual  UNION ALL
            Select  300,        'I3',               0.5,                            2                   From Dual  UNION ALL
            Select  400,        'I1',               0.33333333,                     3                   From Dual  UNION ALL
            Select  400,        'I2',               0.33333333,                     3                   From Dual  UNION ALL
            Select  400,        'I4',               0.33333333,                     3                   From Dual  UNION ALL
            Select  500,        'I1',               0.5,                            2                   From Dual  UNION ALL
            Select  500,        'I3',               0.5,                            2                   From Dual  UNION ALL
            Select  600,        'I2',               0.5,                            2                   From Dual  UNION ALL
            Select  600,        'I3',               0.5,                            2                   From Dual  UNION ALL
            Select  700,        'I1',               0.5,                            2                   From Dual  UNION ALL
            Select  700,        'I3',               0.5,                            2                   From Dual  UNION ALL
            Select  800,        'I1',               0.25,                           4                   From Dual  UNION ALL
            Select  800,        'I2',               0.25,                           4                   From Dual  UNION ALL
            Select  800,        'I3',               0.25,                           4                   From Dual  UNION ALL
            Select  800,        'I5',               0.25,                           4                   From Dual  UNION ALL
            Select  900,        'I1',               0.33333333,                     3                   From Dual  UNION ALL
            Select  900,        'I2',               0.33333333,                     3                   From Dual  UNION ALL
            Select  900,        'I3',               0.33333333,                     3                   From Dual  UNION ALL
            Select  1000,       'I1',               0.2,                            5                   From Dual  UNION ALL
            Select  1000,       'I2',               0.2,                            5                   From Dual  UNION ALL
            Select  1000,       'I4',               0.2,                            5                   From Dual  UNION ALL
            Select  1000,       'I6',               0.2,                            5                   From Dual  UNION ALL
            Select  1000,       'I8',               0.2,                            5                   From Dual 
        ),
--  **************************************************************************************************************************
    name_ids AS
        (   Select T_NAME, Count(T_NAME) OVER(Order By T_NAME ROWS BETWEEN UNBOUNDED PRECEDING And CURRENT ROW) "T_NAME_ID", LISTAGG(T_ID, ', ') WITHIN GROUP (Order By T_ID) "NAME_IDS"
            From   tbl
            Group By T_NAME ),
--  -----------------------------------------------------------
--  R e s u l t   f o r   name_ids
--
--  T_NAME  T_NAME_ID NAME_IDS                                   
--  ------ ---------- -----------------------------------------
--  I1              1 100, 400, 500, 700, 800, 900, 1000       
--  I2              2 100, 200, 300, 400, 600, 800, 900, 1000  
--  I3              3 300, 500, 600, 700, 800, 900             
--  I4              4 400, 1000                                
--  I5              5 100, 200, 800                           
--  I6              6 1000                                   
--  I8              7 1000                                      
--
--  -----------------------------------------------------------
    id_names AS
        (   Select T_ID, LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By T_NAME) "ID_NAMES", COUNT(DISTINCT T_ID) OVER() "TOT_NUM_TRANS"
            From     tbl
            Group By T_ID   ),
--  -----------------------------------------------------------
--  R e s u l t   f o r   id_names
--
--        T_ID ID_NAMES                           TOT_NUM_TRANS
--  ---------- --------------------------------   ------------
--         100 I1, I2, I5                                   10
--         200 I2, I5                                       10     
--         300 I2, I3                                       10
--         400 I1, I2, I4                                   10
--         500 I1, I3                                       10
--         600 I2, I3                                       10
--         700 I1, I3                                       10
--         800 I1, I2, I3, I5                               10
--         900 I1, I2, I3                                   10
--        1000 I1, I2, I4, I6, I8                           10
--  ---------------------------------------------------------------------------------------------
    step1 AS
        (   Select 
                1 "STEP", T_NAME "T_NAME", i.TOT_NUM_TRANS "TOT_NUM_TRANS", 
                Sum(FUZZY_VALUE) "FUZZ_SUM", Round(Sum(FUZZY_VALUE / i.TOT_NUM_TRANS), 8) "SUPPORT", 
                CASE WHEN Sum(FUZZY_VALUE / i.TOT_NUM_TRANS) < 0.1 THEN 'OUT' ELSE 'IN' END "STATUS"
            From    tbl
            Inner  Join (Select Max(TOT_NUM_TRANS) "TOT_NUM_TRANS" From id_names) i ON(1=1)
            Group By T_NAME, i.TOT_NUM_TRANS
        ),
--  -----------------------------------------------------------
--  R e s u l t   f o r   step1
--
--        STEP T_NAME TOT_NUM_TRANS   FUZZ_SUM    SUPPORT STATUS
--  ---------- ------ ------------- ---------- ---------- ------
--           1 I1                10 2.44999999       .245 IN     
--           1 I2                10 2.94999999       .295 IN     
--           1 I3                10 2.58333333  .25833333 IN     
--           1 I4                10  .53333333  .05333333 OUT    
--           1 I5                10 1.08333333  .10833333 IN     
--           1 I6                10         .2        .02 OUT    
--           1 I8                10         .2        .02 OUT 
--  -------------------------------------------------------------------------------------------------------------------------
    step2 AS
        (   Select STEP, T_NAME, TOT_NUM_TRANS, FUZZ_SUM, SUPPORT, STATUS
            From
                (
                    Select  STEP, S_NAME "T_NAME", TOT_NUM_TRANS, Sum(FUZZY_VALUE) "FUZZ_SUM", Sum(SUPPORT) "SUPPORT", CASE WHEN Sum(SUPPORT) < 0.1 THEN 'OUT' ELSE 'IN' END "STATUS"
                    From    (   Select  RWN, STEP, T_NAME "S_NAME", FUZZY_VALUE, TOT_NUM_TRANS, SUPPORT   
                                From    (   Select  ROW_NUMBER() OVER (PARTITION BY s.T_ID, t.T_NAME Order By s.T_ID, t.T_NAME) "RWN", s.STEP, s.T_NAME, i.TOT_NUM_TRANS "TOT_NUM_TRANS",   s.T_ID, t.FUZZY_VALUE,  Round(t.FUZZY_VALUE / i.TOT_NUM_TRANS, 8) "SUPPORT"
                                                From(
                                                        Select
                                                            n.STEP, n.T_NAME, i.T_ID
                                                        From
                                                            id_names i
                                                        Inner Join
                                                            (
                                                                Select 2 "STEP", n1.T_NAME || ', ' || n2.T_NAME "T_NAME" 
                                                                From name_ids n1
                                                                Inner Join
                                                                    name_ids n2 ON(n1.T_NAME <>  n2.T_NAME  And n1.T_NAME_ID < n2.T_NAME_ID)
                                                            ) n ON(1=1)
                                                    ) s
                                            Inner Join 
                                                tbl t ON(t.T_ID = s. T_ID And InStr(s.T_NAME, t.T_NAME) > 0)
                                            Inner Join
                                                id_names i ON(i.T_ID = t.T_ID And InStr(i.ID_NAMES, t.T_NAME) > 0 And 
                                                                InStr(i.ID_NAMES, SubStr(s.T_NAME, 1, 2)) > 0 And InStr(i.ID_NAMES, SubStr(s.T_NAME, 5, 2)) > 0)
                                            Inner Join 
                                                step1 s1 ON(INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step1 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, 1, 2)) > 0 And 
                                                            INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step1 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 1) + 2, 2)) > 0)
                                        )
                                Where RWN = 1
                            )
                    Group By STEP, S_NAME, TOT_NUM_TRANS
                )
        ),
--  -----------------------------------------------------------
--  R e s u l t   f o r   step2
--
--        STEP T_NAME TOT_NUM_TRANS   FUZZ_SUM    SUPPORT STATUS
--  ---------- ------ ------------- ---------- ---------- ------
--           2 I1, I2            10 2.89999998  .28999998 IN     
--           2 I1, I3            10 2.58333333  .25833333 IN     
--           2 I1, I5            10  .58333333  .05833333 OUT    
--           2 I2, I3            10          2         .2 IN     
--           2 I2, I5            10          1         .1 IN
--  -------------------------------------------------------------------------------------------------------------------------
    step3 AS
        (   Select STEP, T_NAME, TOT_NUM_TRANS, FUZZ_SUM, SUPPORT, STATUS
            From
                (
                    Select  STEP, S_NAME "T_NAME", TOT_NUM_TRANS, Sum(FUZZY_VALUE) "FUZZ_SUM", Sum(SUPPORT) "SUPPORT", CASE WHEN Sum(SUPPORT) < 0.1 THEN 'OUT' ELSE 'IN' END "STATUS"
                    From    
                        (   Select  RWN, STEP, T_NAME, T_NAME "S_NAME", FUZZY_VALUE, TOT_NUM_TRANS, SUPPORT   
                            From    
                                (   
                                    Select  
                                        ROW_NUMBER() OVER (PARTITION BY s.T_ID, t.T_NAME Order By s.T_ID, t.T_NAME) "RWN", s.STEP, s.T_NAME, i.TOT_NUM_TRANS "TOT_NUM_TRANS",   s.T_ID, t.FUZZY_VALUE,  Round(t.FUZZY_VALUE / i.TOT_NUM_TRANS, 8) "SUPPORT"
                                    From
                                        (
                                            Select
                                                n.STEP, n.T_NAME, i.T_ID
                                            From
                                                id_names i
                                            Inner Join
                                                (
                                                    Select 3 "STEP", n1.T_NAME || ', ' || n2.T_NAME || ', ' || n3.T_NAME "T_NAME" 
                                                    From name_ids n1
                                                    Inner Join
                                                        name_ids n2 ON(n1.T_NAME <>  n2.T_NAME  And n1.T_NAME_ID < n2.T_NAME_ID)
                                                    Inner Join
                                                        name_ids n3 ON(n2.T_NAME <>  n3.T_NAME  And n2.T_NAME_ID < n3.T_NAME_ID)
                                                ) n ON(1=1)
                                        ) s
                                    Inner Join 
                                        tbl t ON(t.T_ID = s. T_ID And InStr(s.T_NAME, t.T_NAME) > 0)
                                    Inner Join
                                        id_names i ON(i.T_ID = t.T_ID And InStr(i.ID_NAMES, t.T_NAME) > 0 And 
                                                        InStr(i.ID_NAMES, SubStr(s.T_NAME, 1, 2)) > 0 And InStr(i.ID_NAMES, SubStr(s.T_NAME, 5, 2)) > 0)
                                    Inner Join
                                        step2 s2 ON(INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step2 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, 1, 6)) > 0 And 
                                                    INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step2 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 1) + 2, 6)) > 0 And
                                                    INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step2 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 2) + 2, 6)) > 0)
                                )
                            Where RWN = 1
                        )
                    Group By STEP, S_NAME, TOT_NUM_TRANS
                )
        ),
--  -----------------------------------------------------------
--  R e s u l t   f o r   step3
--
--        STEP T_NAME     TOT_NUM_TRANS   FUZZ_SUM    SUPPORT STATUS
--  ---------- ---------- ------------- ---------- ---------- ------
--           3 I1, I2, I3            10 3.48333331  .34833331 IN     
--           3 I1, I2, I5            10  .58333333  .05833333 OUT
--  -------------------------------------------------------------------------------------------------------------------------
    step4 AS
        (Select STEP, T_NAME, TOT_NUM_TRANS, FUZZ_SUM, SUPPORT, STATUS
            From
                (   Select  STEP, S_NAME "T_NAME", TOT_NUM_TRANS, Sum(FUZZY_VALUE) "FUZZ_SUM", Sum(SUPPORT) "SUPPORT", CASE WHEN Sum(SUPPORT) < 0.1 THEN 'OUT' ELSE 'IN' END "STATUS"
                    From    
                        (   Select  RWN, STEP, T_NAME, T_NAME "S_NAME", FUZZY_VALUE, TOT_NUM_TRANS, SUPPORT   
                                From    
                            (   
                                Select  
                                    ROW_NUMBER() OVER (PARTITION BY s.T_ID, t.T_NAME Order By s.T_ID, t.T_NAME) "RWN", s.STEP, s.T_NAME, i.TOT_NUM_TRANS "TOT_NUM_TRANS",   s.T_ID, t.FUZZY_VALUE,  Round(t.FUZZY_VALUE / i.TOT_NUM_TRANS, 8) "SUPPORT"
                                From
                                    (
                                        Select
                                            n.STEP, n.T_NAME, i.T_ID
                                        From
                                            id_names i
                                        Inner Join
                                            (
                                                Select 4 "STEP", n1.T_NAME || ', ' || n2.T_NAME || ', ' || n3.T_NAME || ', ' || n4.T_NAME "T_NAME" 
                                                From name_ids n1
                                                Inner Join
                                                    name_ids n2 ON(n1.T_NAME <>  n2.T_NAME  And n1.T_NAME_ID < n2.T_NAME_ID)
                                                Inner Join
                                                    name_ids n3 ON(n2.T_NAME <>  n3.T_NAME  And n2.T_NAME_ID < n3.T_NAME_ID)
                                                Inner Join
                                                    name_ids n4 ON(n3.T_NAME <>  n4.T_NAME  And n3.T_NAME_ID < n4.T_NAME_ID)
                                            ) n ON(1=1) 
                                    ) s
                                Inner Join 
                                    tbl t ON(t.T_ID = s. T_ID And InStr(s.T_NAME, t.T_NAME) > 0)
                                Inner Join
                                    id_names i ON(i.T_ID = t.T_ID And InStr(i.ID_NAMES, t.T_NAME) > 0 And 
                                                    InStr(i.ID_NAMES, SubStr(s.T_NAME, 1, 2)) > 0 And InStr(i.ID_NAMES, SubStr(s.T_NAME, 5, 2)) > 0 And InStr(i.ID_NAMES, SubStr(s.T_NAME, 9, 2)) > 0)
                                Inner Join
                                    step3 s3 ON(INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step3 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, 1, 10)) > 0 And 
                                                INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step3 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 1) + 2, 10)) > 0 And
                                                INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step3 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 2) + 2, 10)) > 0 And
                                                INSTR((Select LISTAGG(T_NAME, ', ') WITHIN GROUP (Order By STATUS) From step3 Where STATUS = 'IN' Group By STATUS), SubStr(s.T_NAME, InStr(s.T_NAME, ', ', 3) + 2, 10)) > 0)
                            )
                            Where RWN = 1
                        )
                    Group By STEP, S_NAME, TOT_NUM_TRANS
                )
        )
--  -----------------------------------------------------------
--  R e s u l t   f o r   step4
--
--  no rows selected
--  -----------------------------------------------------------
--  *******************************************************
Select * From
    (
        Select * From step1 UNION ALL
        Select * From step2 UNION ALL
        Select * From step3 UNION ALL
        Select * From step4
    )
Order By 
    STEP, T_NAME
--  --------------------------------------------------------------------
--  R e s u l t   all together
--
--        STEP T_NAME           TOT_NUM_TRANS   FUZZ_SUM    SUPPORT STATUS
--  ---------- -------------- ------------- ---------- ---------- ------
--           1 I1                        10 2.44999999 .244999999 IN     
--           1 I2                        10 2.94999999 .294999999 IN     
--           1 I3                        10 2.58333333 .258333333 IN     
--           1 I4                        10  .53333333 .053333333 OUT    
--           1 I5                        10 1.08333333 .108333333 IN     
--           1 I6                        10         .2        .02 OUT    
--           1 I8                        10         .2        .02 OUT    
--           2 I1, I2                    10 2.89999998  .28999998 IN     
--           2 I1, I3                    10 2.58333333  .25833333 IN     
--           2 I1, I5                    10  .58333333  .05833333 OUT    
--           2 I2, I3                    10          2         .2 IN     
--           2 I2, I5                    10          1         .1 IN     
--           3 I1, I2, I3                10 3.48333331  .34833331 IN     
--           3 I1, I2, I5                10  .58333333  .05833333 OUT
--  -------------------------------------------------------------------

Limiting factor for this answer is that the code works ok with T_NAME column that has length of 2 characters as in sample data.此答案的限制因素是代码与示例数据中长度为 2 个字符的 T_NAME 列一起工作正常。 For different lengths there should be some changes in ON() clauses of joins with step2,3,... No time to deal with it now but that also can be solved in a way that it doesn't matter what the length of the column is.对于不同的长度,应该在与 step2,3 的连接的 ON() 子句中进行一些更改,... 现在没有时间处理它,但这也可以通过不管列是。 Regards...问候...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM