关于对类似行进行分组的难题,这些行因偶然的缺失值而不同

时间:2017-07-18 11:15:39

标签: mysql

在处理应该相似但彼此之间存在一个或多个缺失值的行时,我遇到了一个非常有趣的问题。我想要做的是执行一个查询,该查询将所有相似的行折叠(分组)为一个包含所有(或尽可能多)列的值的条目,以便删除缺失的值。

我将把这个问题分成以下两个子问题:

问题A)

鉴于表格:

|--------------------------|
|  col1  |  col2  |  col3  |
|--------------------------|
|   a    |        |   c    |
|   a    |   b    |        |
|        |        |   c    |
|   a    |   b    |        |
|        |   b    |   c    |
|   a    |        |   c    |
|--------------------------|

创建一个返回的查询 - > (a,b,c)

问题B)

鉴于表格:

|--------------------------|
|  col1  |  col2  |  col3  |
|--------------------------|
|   a    |        |   c    |
|   a    |   b    |        |
|        |        |   c    |
|   a    |   b    |        |
|        |   b    |   c    |
|   a    |        |   c    |
|   d    |        |   f    |
|   d    |        |        |
|        |   e    |   f    |
|   d    |   e    |        |
|   d    |        |   f    |
|--------------------------|

创建一个返回的查询 - > (a,b,c),(d,e,f)

关于如何实现这一目标的任何想法或提示?

2 个答案:

答案 0 :(得分:0)

您可以尝试对col1列进行分组,然后选择其他两列的MAX()。如果仔细查看第一个表格,您会看到col2col3分别拥有bc的唯一值。同样的推理也适用于您的第二个表,但是col1有两个不同的值。

SELECT
    col1, MAX(col2) AS col2, MAX(col3) AS col3
FROM yourTable
WHERE col1 IS NOT NULL
GROUP BY col1

在这里演示:

Rextester

答案 1 :(得分:0)

如果只有col1col2相关,则存在3元组,col1col3 {{1}相关与col2相关,然后您可以尝试以下查询:

col3

Demo here