检测数据中的相关列

时间:2009-06-04 16:08:16

标签: sql-server data-mining

假设我有以下数据:

OrderNumber  |  CustomerName  |  CustomerAddress  | CustomerCode
          1  |  Chris         |  1234 Test Drive  |          123
          2  |  Chris         |  1234 Test Drive  |          123

如何检测“CustomerName”,“CustomerAddress”和“CustomerCode”列是否完美相关?我认为Sql Server数据挖掘可能是这项工作的正确工具,但我没有太多的经验。

提前致谢。

更新:

通过“关联”,我的意思是在统计意义上,每当列a为x时,列b将为y。在上面的数据中,最后三列彼此相关,而第一列则不相关。

操作的输入将是表的名称,输出将类似于:

         Column 1     |    Column 2          | Certainty
      CustomerName    |  CustomerAddress     | 100%
      CustomerAddress |  CustomerCode        | 100%

3 个答案:

答案 0 :(得分:0)

你是什么意思相关?你只是想看看他们是否平等?您可以通过将表连接到自身来在T-SQL中执行此操作:

select distinct
    case when a.OrderNumber < b.OrderNumber then a.OrderNumber 
        else b.OrderNumber 
        end as FirstOrderNumber,
    case when a.OrderNumber < b.OrderNumber then b.OrderNumber 
        else a.OrderNumber 
        end as SecondOrderNumber
from
    MyTable a
    inner join MyTable b on
        a.CustomerName = b.CustomerName
        and a.CustomerAddress = b.CustomerAddress
        and a.CustomerCode = b.CustomerCode

这会让你回头:

FirstOrderNumber  |  SecondOrderNumber
               1  |                  2

答案 1 :(得分:0)

相关性是在度量标准空间中定义的,而您的值不是度量标准。

这将为您提供customerAddress唯一定义customerName的客户的百分比:

SELECT  AVG(perfect)
FROM    (
        SELECT
          customerName,
          CASE
            WHEN COUNT(customerAddress) = COUNT(DISTINCT customerAddress)
            THEN 0
            ELSE 1
          END AS perfect
        FROM orders
        GROUP BY
          customerName
        ) q

将其他列代替customerAddresscustomerName替换为此查询,以查找它们之间的差异。

答案 2 :(得分:0)

SQL Server数据概要分析(SQL Server 2008附带的SSIS组件)内置了一个“功能依赖”测试。在这篇博文中描述得很好:

http://blogs.conchango.com/jamiethomson/archive/2008/03/03/ssis-data-profiling-task-part-7-functional-dependency.aspx

我通过一些(记录不足的).NET API访问数据分析器输出,但似乎可行。但是,由于我的要求是处理列值的分配,所以我最终根据DBCC STATISTICS的输出更简单。我对Profiler组件和输出查看器的看法给我留下了深刻的印象。