6

Table1有 3 列:col1, col2,col3

我怎样才能让where的SELECT所有DISTINCT值都等于某个值,然后按 排序,但不同的结果显示它们对应的值?col1col3col2 DESCcol1col2

我尝试了以下但没有奏效:

SELECT DISTINCT (col1), col2
FROM  `Table1` 
WHERE  `col3` =  'X'
ORDER BY  `col2` DESC 

以上不会导致 的不同值col1。如果我删除“ , col2”,那么它将显示不同的值col1,但不会显示它们对应的col2值。

那么我该怎么做呢?

4

4 回答 4

10

也许是这样的:

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

?

您可以在这个SQL Fiddle中使用它。

于 2012-04-24T15:50:30.423 回答
3

我很确定 mySQL 支持该GROUP BY子句,并且给定您想要 的最大值col2这应该可以得到您想要的结果:

SELECT col1, MAX(col2) as col2
FROM Table1
WHERE col3 = 'X'
GROUP BY col1
ORDER BY col2
于 2012-04-24T15:50:03.583 回答
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

但是,如果您需要整个记录(以及表中可能包含的其他字段),则需要初始语法。

于 2012-04-24T15:06:26.987 回答
-1
SELECT t.col1, max(t.col2)
  FROM Table1 t
 WHERE t.col3='X'
 GROUP BY t.col1
 ORDER BY t.col2 DESC;

编辑:这个答案有几个修改,保持最准确的一个。

于 2012-04-24T15:07:24.923 回答