首页 文章

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

提问于
浏览
21

我有一个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 回答

  • 27

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

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

    看到它在线工作:sqlfiddle

  • 0

    更新1

    你最好用这个来对抗上面 .

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

    演示

    我说的原因是因为使用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;
    

    实时工作示例

  • 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
    
  • 0

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

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

    对此最简单的查询是

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

    使用group by方法返回额外的行,其中显式检查每个字段,尽管更长时间返回与count相同的no记录(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
    )
    

相关问题