【问题标题】:SQL: How to sort overlapping groups efficientlySQL:如何有效地对重叠组进行排序
【发布时间】:2015-05-04 10:30:57
【问题描述】:

我正在尝试在具有 10.000+ 行的数据库上创建组。 我需要快速高效,所以我正在为每个集群做二进制变量。 一、二、四、五、六属于Group1。

但“二”也可能在第 nr 组中。 2,由于错误我无法克服,因为我的数据集来自网络爬虫。我尝试以独特的方式对所有内容进行排序,但如果我希望高效且快速,基本上不可能不出错。

ID   Title    Group1      Group2     Group3      Ungrouped
1    One      1           0          0           0
2    Two      1           1          0           0
3    Three    0           1          1           0
4    Four     1           0          1           0
5    Five     1           0          0           0
6    Six      1           1          1           0
7    Seven    0           0          0           1

我的解决方案想法:

  1. 分配组(一个),直到所有内容都被分组一次或多次。
  2. 对分配了多个组(2、3、4、6)的所有内容进行查询
  3. 手动决定要删除哪些 1,直到它们每个只分配一个组。

第 3 部分手动做其实是个好主意,因为它需要对文档进行内容分析)

我的问题:

如何指定我需要查看多个组的所有内容?它是否与约束和唯一值有关,还是有一种我没有看到的更简单和明显的方式?

【问题讨论】:

    标签: sql sqlite unique-constraint


    【解决方案1】:

    如果您的集群存储为整数,您可以这样做:

    select c.*
    from clusters c
    where (cluster1 + cluster2 + cluster3) > 1;
    

    我不知道 SQLite 中的“二进制变量”是什么。一些数据库确实支持二进制标志,您需要将值转换为 where 子句的整数。

    【讨论】:

    • 这听起来很完美!你能解释更多关于'c.*'和'clusters c'的信息吗?正如您可能已经注意到的那样,我是 SQL 新手。
    • c 是一个表别名。此查询实际上不需要它。
    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2016-08-12
    • 2023-03-20
    • 2018-10-11
    相关资源
    最近更新 更多