1

假设我有以下数据:

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%
4

3 回答 3

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
于 2009-06-04T16:16:05.653 回答
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以查找它们之间的差异。

于 2009-06-04T16:23:55.357 回答
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 输出的更简单的东西。我对分析器组件和输出查看器所看到的印象非常深刻。

于 2009-06-05T01:17:18.020 回答