0

選択した行について、列c1から最大値を取得してから列c2から最大値を取得するより良い方法があるかどうか疑問に思います

SELECT MAX(c1) , MAX(c2) FROM t GROUP BY c1 HAVING c1 = MAX(c1)
4

4 に答える 4

4
SELECT Max(t2.c1) as C1, 
       Max(t1.c2) as C2 
FROM   t t1 
       INNER JOIN (SELECT Max(c1) AS C1 
                   FROM   t) t2 
               ON t1.c1 = t2.c1 
于 2012-06-26T08:48:05.093 に答える
1

hkutluayの応答に関するコメントを読んでください。これは、あなたが望むものかもしれません。

select MAX(colName)
from
(select col1 as colName
from tableName
union
select col2
from tableName) subqueryName
于 2012-06-26T09:48:05.417 に答える
1

すべての個別のc1が必要なのか、それとも最大のものだけが必要なのかはよくわかりません。

すべてのc1が必要な場合:

SELECT c1, MAX(c2) FROM t GROUP BY c1;

最大のc1のみが必要な場合:

SELECT c1, c2 FROM t ORDER BY c1 DESC, c2 DESC LIMIT 1;
于 2012-06-26T09:58:45.980 に答える
0

私はmysqlがCTEを持っていないことを知っています。ただし、質問にはSQLのマークも付いており、CTEはサブクエリの適切でクリーンなソリューションであるため、完全を期すためにCTEバージョンを次に示します。

WITH zmax AS (
        SELECT MAX(v1) AS v1
        FROM ztable
        )
SELECT zt.v1
        , MAX(zt.v2) AS v2
FROM ztable zt
JOIN zmax mx ON zt.v1 = mx.v1
GROUP BY zt.v1
        ;
于 2012-06-26T09:41:31.613 に答える