如何选择两列,其中一列必须是DISTINCT?

时间:2012-04-24 15:02:34

标签: mysql sql

Table1有3列:col1col2col3

SELECT DISTINCT col1 col3的所有col2 DESCcol1等于某个值,然后按col2对其进行排序,但又有SELECT DISTINCT (col1), col2 FROM `Table1` WHERE `col3` = 'X' ORDER BY `col2` DESC col1结果显示了相应的, col2值?

我尝试了以下但是没有用:

col1

上述内容不会产生col2的不同值。如果我删除" {{1}}",则它会显示{{1}}的不同值,但它不会显示相应的{{1}}值。

那我该怎么办?

4 个答案:

答案 0 :(得分:9)

也许是这样的:

SELECT col1, MAX(col2) col2_max
FROM Table1
WHERE col3 = 'X'
GROUP BY col1
ORDER BY col2_max

您可以在此SQL Fiddle中使用它。

答案 1 :(得分:3)

我非常确定mySQL支持GROUP BY子句,并且如果你想要{em>最大值col2,这应该可以得到你想要的结果:

SELECT col1, MAX(col2) as col2
FROM Table1
WHERE col3 = 'X'
GROUP BY col1
ORDER BY col2

答案 2 :(得分:1)

我假设您希望每个col2获得最大col1

SELECT  tm.*
FROM    (
        SELECT  DISTINCT col1
        FROM    table1
        WHERE   col3 = 'X'
        ) t
JOIN    table tm
ON      id =
        (
        SELECT  id
        FROM    table1 ti
        WHERE   ti.col3 = 'X'
                AND ti.col1 = t.col1
        ORDER BY
                col2 DESC
        LIMIT 1
        ) col2
ORDER BY
        col2 DESC

(col3, col1, col2)上创建一个索引,以便快速工作。

<强>更新

如果您只需要这两列,那么查询确实可以变得更简单:

SELECT  col1, MAX(col2) AS maxcol2
FROM    table1
WHERE   col3 = 'X'
GROUP BY
        col1
ORDER BY
        maxcol2 DESC

但如果你需要整个记录(以及表中可能包含的附加字段),你需要初始语法。

答案 3 :(得分:-1)

SELECT t.col1, max(t.col2)
  FROM Table1 t
 WHERE t.col3='X'
 GROUP BY t.col1
 ORDER BY t.col2 DESC;

编辑:这个答案经过了多次修改,保留了最准确的答案。