12

私はテーブルを持っています:

評価:

id | one | two | three
1  | 12  | 3   | 7
2  | 11  | 30  | 3
3  | 8   | 14  | 4

これらのフィールド(1、2、3)からSQL MAX値を取得するにはどうすればよいですか?この例では、これは30です。

4

7 に答える 7

20

MySQLでは、 GREATEST関数を使用できます。

SELECT  MAX(GREATEST(one, two, three))
FROM    T;

SQLフィドルの例

于 2013-03-01T11:57:27.293 に答える
6
SELECT MAX(field) FROM (
    SELECT one AS field FROM table
    UNION 
    SELECT two AS field FROM table
    UNION 
    SELECT three AS field FROM table
) AS t
于 2013-03-01T11:58:46.227 に答える
4
select GREATEST(max(one), max(two), max(three)) as maximum 
from table;
于 2013-03-01T11:59:22.860 に答える
3

次のようなデータのピボットを解除できます。

select max(value)
from
(
  select id, 'one' col, one value
  from yourtable
  union all
  select id, 'two' col, two value
  from yourtable
  union all
  select id, 'three' col, three value
  from yourtable
) src

SQL FiddlewithDemoを参照してください。

または、次のようなものを使用できます。

SELECT max(data)
FROM 
(
  SELECT 
    CASE s.col
      WHEN 'one' THEN one
      WHEN 'two' THEN two
      WHEN 'three' THEN three
    END AS DATA
  FROM yourtable t
  CROSS JOIN 
  (
    SELECT 'one' AS col
    UNION ALL SELECT 'two'
    UNION ALL SELECT 'three'
  ) s
) s

SQL FiddlewithDemoを参照してください

于 2013-03-01T11:57:16.437 に答える
3

このクエリを試してください

SELECT tempTable.id, tempTable.max(val) 
FROM (SELECT id, max(one) AS val
      FROM tbl 
      UNION 
      SELECT id, max(two) AS val
      FROM tbl 
      UNION 
      SELECT id, max(three) AS val
      FROM tbl
) AS tempTable;
于 2013-03-01T11:57:59.067 に答える
1
select max( if( one > two, if( one > three, one, three ), if( two > three, two, three ) )
  from Rating
于 2013-03-01T11:58:42.480 に答える
1

caseステートメントを使用できます

SELECT
    CASE
        WHEN one >= two AND one >= three THEN one
        WHEN two >= one AND two >= three THEN two
        WHEN three >= one AND three >= two THEN three
        ELSE one
    END AS MaxVal
于 2013-03-01T12:00:16.173 に答える