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

时间:2012-06-30 20:03:02

标签: mysql sql database distinct distinct-values

我有一个看起来像这样的mysql表:

1   value1    value2    3534
2   value1    value1    8456
3   value1    value2    3566
4   value1    value3    7345
5   value2    value3    6734

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

1   value1    value2    3534
2   value1    value1    8456
4   value1    value3    7345
5   value2    value3    6734

我发现了一些关于如何操作的样本,但它们都在每个列上单独选择不同。

6 个答案:

答案 0 :(得分:27)

更新1

最好在上面使用它。

SELECT id, col2, col3, col4
FROM yourtable
GROUP BY col2, col3;

Demo

我说的原因是因为使用了CONCAT,我无法获得 this case 的结果。第一个查询返回5行,但CONCAT返回4行,这是INCORRECT。

希望你明白我的意思。


假设表中的列是(id,col2,col3,col4)。

SELECT DISTINCT(CONCAT(col2, col3)) as "dummy column", id, col2, col3, col4
FROM yourtable
GROUP BY CONCAT(col2, col3);

或者

SELECT id, col2, col3, MIN(col4)
FROM yourtable
GROUP BY col2, col3;

live working example

答案 1 :(得分:15)

假设第一列是唯一的,您可以这样做:

SELECT id, col2, col3, col4
FROM yourtable
WHERE id IN
(
    SELECT MIN(id)
    FROM yourtable
    GROUP BY col2, col3
)

查看在线工作:sqlfiddle

答案 2 :(得分:1)

假设表格中的列为(id, col1, col2, col3),您可以:

SELECT  *
FROM    YourTable yt
JOIN    (
        SELECT  MIN(id) as minid
        FROM    YourTable
        GROUP BY
                col1, col2
        ) filter
ON      filter.minid = yt.id

答案 3 :(得分:0)

此查询确保column1和column2的组合是唯一的,同时选择第三列的最小值

SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2

答案 4 :(得分:0)

最简单的查询是

SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2

答案 5 :(得分:0)

使用group by方法返回额外的行,其中显式检查每个字段,尽管更长时间返回与count相同的记录数(Distinct ..)

SELECT id, col2, col3, col4
FROM yourtable yt
WHERE id =
(
 SELECT MIN(id)
 FROM yourtable yt1
 WHERE yt.col2 = yt1.col2
 AND yt.col3 = yt1.col3
)