6

Table13つの列があります:col1、、col2col3

whereSELECTのすべての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フィドルで遊ぶことができます。

于 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)

アップデート:

これらの2つの列のみが必要な場合は、クエリをさらに簡単にすることができます。

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 に答える