会員登録で5000円分が当たります

MySQLで1コードの中で3つのカラムから最大値を
取得する事は可能でしょうか?

id test1,test2,test3
1 5 7 6
だとすると、id=1の最大値は7と返してくれるSQL
を書きたいです。IF文とか使わないと無理でしょうか?

よろしくお願いします。

A 回答 (1件)

greatest関数というのがあるようです。



select greatest(test1,test2,test3) from t1 where id=1

http://dev.mysql.com/doc/refman/4.1/ja/mathemati …
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

Q複数列の最大値を求めたい

SQLServerでOracleのGREATEST関数のような事がしたいです。

具体的に書きますと、

ID | 列1 | 列2 | 列3 | 列4 | 列5
------------------------------
01 | 700 | 200 | 300 | 400 | 100
02 | 100 | 800 | 200 | 300 | 200
03 | 100 | 300 | 900 | 100 | 100

という表があった場合に

ID | 最大値
------------------------------
01 | 700
02 | 800
03 | 900

といった結果を求めたいです。

CASE等を利用するしか方法はないのでしょうか。

Aベストアンサー

SELECT ID,MAX(列) AS 最大値 FROM
(SELECT ID,列1 AS 列 FROM テーブル
UNION ALL SELECT ID,列2 AS 列 FROM テーブル
UNION ALL SELECT ID,列3 AS 列 FROM テーブル
UNION ALL SELECT ID,列4 AS 列 FROM テーブル
UNION ALL SELECT ID,列5 AS 列 FROM テーブル) AS TBL
GROUP BY ID ORDER BY 1
でどうでしょうか。

QGREATESTで NULLをスルーする方法は?

・MySQLのGREATESTで、引数のどれかが NULL である場合、NULLを戻さず、それ以外の残りから ( 最大値の ) 引数を戻すことは可能でしょうか?

・また、GREATEST以外で、同じような処理をするにはどうすれば良いでしょうか?

・後、MAXとは何が違うのでしょうか?


■最終的にやりたいこと
・「aカラム」と「NULLを含むbカラム」の最大値基準で、降順表示したい

Aベストアンサー

null を取り得る項目は、 COALESCE を被せて null の場合はその型の最小値を取るようにするとか。

例) ------------------------------------
SELECT * FROM hoge
ORDER BY GREATEST(a, COALESCE(b, -2147483648)) DESC;


もしくは、CASE式を使ってnull判定をするとか。

例) ------------------------------------
SELECT * FROM hoge
ORDER BY CASE WHEN b IS NOT NULL THEN GREATEST(a, b) ELSE a END DESC;

SELECT * FROM hoge
ORDER BY CASE WHEN b IS NULL THEN a WHEN b > a THEN b ELSE a END DESC;


> 後、MAXとは何が違うのでしょうか?

MAXは集約関数ですから、複数のレコード(タプル)の指定されたカラム(属性)の最大値を求める関数ですね。一方、GREATEST は与えられた引数の中から最大のものを取り出す関数です。

感覚的には、MAXは縦の中の最大値を求め、GREATESTは横の中の最大値を求めるという感じですね。

http://dev.mysql.com/doc/refman/5.1/ja/comparison-operators.html#function_greatest
http://dev.mysql.com/doc/refman/5.1/ja/group-by-functions.html#function_min

null を取り得る項目は、 COALESCE を被せて null の場合はその型の最小値を取るようにするとか。

例) ------------------------------------
SELECT * FROM hoge
ORDER BY GREATEST(a, COALESCE(b, -2147483648)) DESC;


もしくは、CASE式を使ってnull判定をするとか。

例) ------------------------------------
SELECT * FROM hoge
ORDER BY CASE WHEN b IS NOT NULL THEN GREATEST(a, b) ELSE a END DESC;

SELECT * FROM hoge
ORDER BY CASE WHEN b IS NULL THEN a WHEN b > a THEN b ELSE a END DESC;


...続きを読む

Qキー毎の、ある列のmaxのレコードを取得し、別の列の値を取得したい

下記のようなテーブルがあった場合に、

ID1|ID2|価格
-----------------------
1 | 1 | 100
1 | 2 | 200
1 | 3 | 150
2 | 1 | 1000
2 | 2 | 500
3 | 1 | 50
3 | 2 | 100

下記のようなレコードを返してくるSQLを教えて下さい。
ID1 | ID2 | 価格
-----------------------
1 | 3 | 150
2 | 2 | 500
3 | 2 | 100

要するに、ID1毎に、ID2が最大のレコードを取得し、価格列の数値を使いたいのです。
基本的なSQLは理解しているつもりなのですが・・・。

ご回答よろしくお願いします。

Aベストアンサー

SQL> select * from test;

   ID1    ID2   XXX
---------- ---------- ----------
    1     1    100
    1     2    200
    1     3    150
    2     1    1000
    2     2    500
    3     1     50
    3     2    100

7行が選択されました。

SQL> select ID1
 2    ,max(ID2) as ID2
 3    ,max(XXX)keep(dense_rank Last order by ID2) as XXX
 4  from test
 5  group by ID1;

    ID1    ID2    XXX
---------- ---------- ----------
     1     3     150
     2     2     500
     3     2     100

SQL>

SQL> select * from test;

   ID1    ID2   XXX
---------- ---------- ----------
    1     1    100
    1     2    200
    1     3    150
    2     1    1000
    2     2    500
    3     1     50
    3     2    100

7行が選択されました。

SQL> select ID1
 2    ,max(ID2) as ID2
 3    ,max(XXX)keep(dense_rank Last order by ID2) as XXX
 4  from test
...続きを読む

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QORACLE SQL 複数項目の最大抽出

はじめまして
当方、初心者で勉強の身です。ご回答頂けたら幸いです。

Oracle10gを使っています。

表1
カラムA(PK) CHAR型
カラムB(PK) CHAR型
カラムC(PK) CHAR型
カラムD(PK) CHAR型


A     B     C     D
---------------------------------
AUD   2012   1      30
AUD   2011   12     26
EUR   2010   7      1
EUR   2011   6     21
EUR   2012   5      1
JPY   2011   6     26
JPY   2011   12     25

というデータであれば


A     B     C     D
---------------------------------
AUD   2012   1      30
EUR   2012   5      1
JPY   2011   12     25


というデータを抽出したいと考えています。

具体的には、Aをキーにして、B(年)、C(月)、D(日)の年月日の最新日付を取りたいですが
どうすればよいでしょうか。

お手数をおかけしますが、よろしくお願い致します。

はじめまして
当方、初心者で勉強の身です。ご回答頂けたら幸いです。

Oracle10gを使っています。

表1
カラムA(PK) CHAR型
カラムB(PK) CHAR型
カラムC(PK) CHAR型
カラムD(PK) CHAR型


A     B     C     D
---------------------------------
AUD   2012   1      30
AUD   2011   12     26
EUR   2010   7      1
EUR   2011   6     21
EUR   2012   5      1
JPY   2011   6     26
JPY   2011   12   ...続きを読む

Aベストアンサー

カラムB~カラムDがCHARなのがちと面倒ですね。

select カラムA, カラムB, カラムC, カラムD
from 表1
where
(カラムA, カラムB||right('0'||rtrim(カラムC), 2)||right('0'||rtrim(カラムD), 2))
in
(
 select カラムA, max(カラムB||right('0'||rtrim(カラムC), 2)||right('0'||rtrim(カラムD), 2))
 from 表1
 group by カラムA
)
/
ですかね


人気Q&Aランキング