在mysql中选择不同的5列组合

问题描述 投票:0回答:1

我有一个看起来像这样的mysql表:Col 1是UNIQUE。

1   value1    value2    0    2
2   value1    value2    1    3
3   value3    value4    3    2
4   value4    value5    4    1
5   value3    value4    3    1

我需要一个查询来选择具有不同的列1和2的所有行,例如,我希望此示例的输出如下所示:

1   value1    value2    0    2
3   value3    value4    3    2
4   value4    value5    4    1

我需要不同的列1和2,但是所有列的组合总会总是不同的。我想显示不同的col 1,2和3,而无需重复col 2,3。

我已经找到了一些有关如何执行此操作的示例,但是它们在每一列上的选择都是不同的。我也尝试了许多stackoverflow答案。但是我的问题有所不同。

mysql sql database distinct distinct-values
1个回答
0
投票

一种表现良好的方法是相关子查询:

select t.*
from t
where t.col1 = (select min(t2.col1)
                from t t2
                where t2.col2 = t.col2 and t2.col3 = t.col3
               );

为了获得最佳性能,您需要在(col2, col3, col1)上建立索引。

我强烈建议在所有表上都拥有一个主键,但是如果您没有主键,那么就可以使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by col2, col3 order by col2) as seqnum
      from t
     ) t
where seqnum = 1;

这会产生更多的开销,因为在只对第一个进行过滤之前,必须将行号分配给所有行。


0
投票

可以通过使用ROW_NUMBER来实现:

ROW_NUMBER
© www.soinside.com 2019 - 2024. All rights reserved.