我有一个数据表,我希望能够输出所有不重复两列内容的数据,例如:
示例表
Column1 | Column2 | Column3
1 XX pop
2 YY yif
3 ZZ pop
4 PP pop
5 XX pop
6 YY yif
7 PP Hor
8 MM tre
9 PP pop
10 XX pop
11 MM pop
我想要做的是输出两者第2列和第3列的值不会重复的所有行,因此您会看到Column1
== 1和{{1 }} == 5在Column1
和Column2
中都具有相同的值,因此它们只需输出Column3
== 1而不是= 5(或= 10)。
我想设置查询以输出所有行,除了Column1
== 5,6,9,10,因为这些行同时包含Column1
和 {{ 1}}重复。
查询的预期输出:(注意:所有三列都是必需的)
Column2
我尝试过查看分组依据,但这只是按一列分组,或者至少从左到右分组,因此Column3
会Column1 | Column2 | Column3
1 XX pop
2 YY yif
3 ZZ pop
4 PP pop
7 PP Hor
8 MM tre
11 MM pop
GROUP BY (Column2, Column3)
中的所有值< em>然后<{em>} GROUP BY
中的值,而不是平均对待两列。
我发现了一种可能的解决方案,即预先连接列,例如
Column2
来自Is it possible to GROUP BY multiple columns using MySQL?,但这已经被模糊地批评(至少,作为对这个问题的回答),但似乎是我所看到的最接近我想做的事情的代码。
那么, 应如何构建我的Column3
条款以达到此结果?
GROUP BY CONCAT(Column2, '_', Column3)
我找到了接近这个的好方法吗?
答案 0 :(得分:2)
GROUP BY
。根据您想要的结果,您必须对其余数据应用额外的GROUP
函数。在您的情况下,您似乎想要第一个 column1 索引,以及(column2,column3)
以下查询应该可以解决问题:
SELECT MIN(column1) AS column1,column2,column3
FROM table1
GROUP BY column2,column3
ORDER BY MIN(column1) ASC;
答案 1 :(得分:0)
如果您根本不关心Column1,则甚至不需要GROUP BY
。只需使用DISTINCT
SELECT DISTINCT Column2, Column3
FROM the_table
ORDER BY however_you_want
;
否则,诺伯特的回答可能更合适。