【问题标题】:SQL counting distinct elements of overlapping setsSQL 计算重叠集的不同元素
【发布时间】:2013-01-08 16:20:36
【问题描述】:

我想计算两组不同元素的数量。正是这就是集合 1 和集合 2 的并集。

如何将以下伪 SQL 格式化为正常运行的 SQL

select COUNT(set1 union set2) from table1`

EDIT set1 和 set2 是 table1 的列

这是一个简短的例子:

在一个班级中设置 1 个学生:

Bubba, Jody, Rex, Sandy, Jules

在一个班级中设置 2 名学生:

Jody, Rob, Horace, Thor, Rex

我想要两个班级的学生人数不同:

Bubba, Jody, Rex, Sandy Jules, Rob, Horace, Thor

所以,工会就可以了,我可以数数。

【问题讨论】:

  • 你能具体说明一下这些集合是什么吗?伪查询没有多大意义。这可能可以通过联合来完成。
  • 哈哈是的,它应该像一个工会。由于集合没有重复的元素......我想它更像是附加?或者,如果我确实有联合操作,我可以只计算元素
  • 您不需要将 distinct 与 intersect 一起使用,因为 intersect 总是返回不同的值。使用“Union”表示常见,“Except”表示左查询不同。
  • 如果 set1 和 set2 是列,它们是什么数据类型?列中有什么样的值,如果它在集合中,则为 1,如果不在,则为 NULL,或者其他什么?您需要计算每个集合中的记录,还是需要 set1 和 set2 列中的不同值?
  • 请提供输入示例和预期结果以澄清问题。

标签: sql count distinct set overlapping


【解决方案1】:
Select Count(column_alias) From
( Select set1 As column_alias From Table1 
Union 
Select set2 From Table1 )

联盟将使元素变得独一无二。这仅在列数据类型兼容时才有效。如果需要,您可以修改子查询以包含 Where 条件。

【讨论】:

    【解决方案2】:

    假设列中为 1 表示在集合中,NULL 表示不在集合中

    select count(*)
    from Table1
    where set1 is not null or set2 is not null
    

    如果包含在集合中的表示不同,则重写 where 子句。

    【讨论】:

      猜你喜欢
      • 2012-12-07
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多