【问题标题】:How to group rows where one or more columns are equal?如何对一列或多列相等的行进行分组?
【发布时间】:2014-01-27 03:42:00
【问题描述】:

假设我有一个包含以下列的产品数据库:

name
isbn
ean
upc
sku

如果这些列中的任何一个匹配,我想将产品组合在一起。我该怎么做?

我尝试使用GROUP BY 子句,但显然这意味着所有 列必须匹配,而不仅仅是一个。

换句话说,GROUP BY name, isbn, ean, upc, sku 仅在 所有 列相等时将产品组合在一起,如果 任何 列我想将它们组合在一起是平等的。

示例:

id  |  name   |     isbn     |  ean  |    upc     | sku
 0    banana1       null        null   0000000000   1234
 1    banana2       6789        null   0000000000   1234 
 2    banana3       6789        null   1111111111   null
 3    banana4       null        null   1111111111   null

所有这些行都应该组合在一起,因为它们至少有一个相互匹配的列。

【问题讨论】:

  • @Wrikken a & b 是什么意思?只有一张桌子..
  • 你能举个例子吗?输入和期望的输出?
  • 示例会有所帮助。组团是什么意思?
  • 对不起,我会添加一个例子。
  • @Nate 。 . .这是一个图遍历问题,MySQL 不太适合此类任务。也许这个问题还有其他限制,使其更容易解决。

标签: mysql sql group-by


【解决方案1】:

这是一个图遍历问题,在 SQL 中实现起来很痛苦——尤其是不支持分层查询的 MySQL。

有一个迭代的解决方案还不错。这个想法是添加一个列“groupid”,然后不断更新。更新的规则是最初用 id 填充它,然后沿任何维度为其分配最小值。下面是代码示例:

update products
    set groupid = id;

/* now run this multiple times until there are no more updates */
update products p
    set groupid = (select min(groupid)
                   from products p2
                   where p.name = p2.name or
                         p.isbn = p2.isbn or
                         p.ean = p2.ean or
                         p.upc = p2.upc or
                         p.sku = p2.sku
                 );

【讨论】:

    【解决方案2】:

    不。 GROUP BY 要求分组表达式中的所有元素在该组中的行中是相同的。我能想到的最好的是:

    SELECT
      *
    FROM
      table
    WHERE
      name = isbn 
      OR name = ean
      OR name = upc
      OR name = sku
      OR isbn = ean
      OR isbn = upc
      OR isbn = sku
      OR ean = upc
      OR ean = sku
      OR upc = sku
    

    如您所见,缺点是这非常难看,并且在添加新列时无法很好地扩展。如果它是一次性脚本,我只会使用它——例如,识别数据损坏。

    【讨论】:

    • 这不是将一行与自身进行比较,而不是与其他行进行比较吗?
    • 是的。看来,我对您的问题的解释与您的意图不同。一个例子肯定会帮助你阐明你的意图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多