30

我有一个如下所示的 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

我找到了一些关于如何做到这一点的示例,但它们都在每一列上分别选择不同的。

4

6 回答 6

37

更新 1

最好你用这个来对付上面。

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

演示

我说的原因是因为使用 CONCAT,在这种情况下我没有得到想要的结果。第一个查询返回我 5 行但是 CONCAT 返回我 4 行,这是不正确的。

希望你明白我的意思。


假设表中的列是 (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;

现场工作示例

于 2012-06-30T20:20:46.417 回答
23

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

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

在线查看它:sqlfiddle

于 2012-06-30T20:06:05.330 回答
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
于 2012-06-30T20:06:13.257 回答
0

该查询确保column1和column2的组合是唯一的,同时选择column 3的最小值

SELECT col1, col2, MIN(col3)
FROM yourTable
GROUP BY col1, col2
于 2012-06-30T20:07:57.953 回答
0

最简单的查询是

SELECT col1, col2, MIN(col3)
FROM myTable
GROUP BY col1, col2
于 2012-06-30T20:14:40.910 回答
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
)
于 2017-07-27T12:16:26.167 回答