Sql 确定表中列之间的相关性
我有一个非规范化表格,如下所示:Sql 确定表中列之间的相关性,sql,database-normalization,Sql,Database Normalization,我有一个非规范化表格,如下所示: Col1 Col2 Col3 Col4 Col5 Paris France Europe 1 4 Paris France Europe 2 5 Paris France Europe 3 6 Washington D.C.
Col1 Col2 Col3 Col4 Col5
Paris France Europe 1 4
Paris France Europe 2 5
Paris France Europe 3 6
Washington D.C. USA North America 8 9
Washington D.C. USA North America 7 7
...
many more rows
...
为了规范化它,我需要理解数据的结构
从Col3到Col2以及从Col2到Col1可能存在逻辑依赖关系。巴黎是法国的首都,法国是欧洲的一个国家
如何用SQL查询证明这一点?基本上,我需要证明有像“巴黎-法国-欧洲”、“华盛顿特区-美国-北美”这样的组合,但从来没有像“巴黎-美国-欧洲”或“华盛顿特区-美国-欧洲”这样的组合。事实上,如果我在数据库中找到类似“柏林-德国-非洲”的内容,只要我没有找到“柏林-德国-欧洲”,那么这个查询也应该被证明是正确的
SQL查询可以反驳依赖关系,因为您只需要一个反例。但证明依赖关系意味着表明它永远不会被破坏,而当前的DB内容只代表一个示例。您可以使用聚合:
select col3, count(*), count(distinct col2)
from t
group by col3;
期望第二列的值为“1”。通过使用having count(distinct col2)>1,可以获得col2
中具有多个值的所有示例
当然,城市确实有相同的名字。例如,巴黎是一个相当有名的城市。你能用真实数据更新你的问题吗?包含数字和字母的五列有点抽象。嗨@TimBiegeleisen,我更新了问题谢谢,看起来你的答案中分号太多了。@Paul。非常感谢。