在MySQL

时间:2015-07-22 17:29:28

标签: mysql

我有一个数据表,我希望能够输出所有不重复两列内容的数据,例如:

示例表

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在Column1Column2中都具有相同的值,因此它们只需输出Column3 == 1而不是= 5(或= 10)。

我想设置查询以输出所有行,除了Column1 == 5,6,9,10,因为这些行同时包含Column1 {{ 1}}重复。

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

Column2

我尝试过查看分组依据,但这只是按一列分组,或者至少从左到右分组,因此Column3Column1 | 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) 我找到了接近这个的好方法吗?

2 个答案:

答案 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
;

否则,诺伯特的回答可能更合适。