在MySQL中按多个列进行分组,并且这些列具有相等的优先级。

10 浏览
0 Comments

在MySQL中按多个列进行分组,并且这些列具有相等的优先级。

我有一个数据表,我想要输出那些两列内容不重复的所有数据,一个例子:

示例表格:

列1 | 列2 | 列3
   1       XX     弹出
   2       YY     yif
   3       ZZ     弹出
   4       PP     弹出
   5       XX     弹出
   6       YY     yif
   7       PP     Hor
   8       MM     tre
   9       PP     弹出
  10      XX     弹出   
  11      MM     弹出

我想要做的是输出所有行,其中列2和列3的值都不重复,所以你会看到列1 == 1和列1 == 5在列2和列3中有相同的值,所以只需要输出列1 == 1而不等于5(或等于10)的行。

我想要设置查询来输出所有行,除了列1 == 5, 6, 9, 10,因为这些行中的列2和列3都有重复。

查询的预期输出结果:(注意:所有三列都是必需的)

列1 | 列2 | 列3
   1       XX     弹出
   2       YY     yif
   3       ZZ     弹出
   4       PP     弹出
   7       PP     Hor
   8       MM     tre
  11      MM     弹出

我尝试过使用Group By,但它似乎只能按照一列进行分组,或者至少按照从左到右的顺序进行分组,所以GROUP BY (列2, 列3)会先按照列2的值进行分组,然后再按照列3的值进行分组,而不是平等地处理两列。

我找到了一个可能的解决方案,那就是在之前将列连接起来,例如GROUP BY CONCAT(列2, '_', 列3),来自于Is it possible to GROUP BY multiple columns using MySQL?,但是这个解决方案在某种程度上受到了批评(至少作为那个问题的答案),但是它似乎是我见过的最接近实现我想要的功能的代码。

  • 那么,我应该如何组织我的GROUP BY子句来达到这个结果?
  • 我找到的GROUP BY CONCAT的方法是一个好的方法吗?
0
0 Comments

在MySQL中,当我们需要按多个列进行分组,并且这些列的优先级相等时,可能会遇到问题。下面是一个关于这个问题的解决方法:

问题的原因是我们需要按多个列进行分组,但是这些列的优先级相等。在这种情况下,我们无法简单地使用GROUP BY子句来实现分组。如果我们不关心Column1列,我们甚至不需要使用GROUP BY,只需要使用DISTINCT关键字就可以解决问题。具体解决方法如下:

SELECT DISTINCT Column2, Column3
FROM the_table
ORDER BY however_you_want
;

这将返回根据Column2和Column3进行去重后的结果集,并按照你指定的排序方式进行排序。

然而,如果我们需要对所有列进行分组,并且Column1是最重要的列,那么上述方法就无法满足要求。在这种情况下,我们可以参考Norbert的回答,他给出了更适合的解决方案。

总结起来,当我们需要按多个列进行分组,并且这些列的优先级相等时,我们可以使用DISTINCT关键字来实现简单的分组,如果需要对所有列进行分组,并且有重要列存在,则需要使用其他方法来解决。

0
0 Comments

在MySQL中,可以通过多个列进行GROUP BY操作。根据您想要的结果,您需要对其余数据应用额外的GROUP函数。在您的情况下,似乎您想要的是第一个column1索引和(column2,column3)的唯一组合。

下面的查询可以解决这个问题:

SELECT MIN(column1) AS column1,column2,column3
FROM table1
GROUP BY column2,column3
ORDER BY MIN(column1) ASC;

测试这个SQL代码后,发现它返回了我想要的结果,谢谢。您能解释一下SELECT MIN(column1) AS column1,column2,column3GROUP BY的影响吗?我不太熟悉那个语法。谢谢。

我认为SELECT MIN(column1)只是为了给出该列2和3的组合的最低ID。

0