• ベストアンサー

MySQL関数max()を条件にSELECTできませんか?

MySQL5.0を使っています。 次のようなテーブル(items)があるとします。 name(varchar)|number(int) --------------------------- itemA | 5 itemB | 2 itemC | 3 ここからnumberの最大値を持つnameを抽出したいのです。 SELECT max(number) FROM items とすると当然「5」が返ってきますが、このmax(number)を条件にしてitemを抽出することはできないのでしょうか? よろしくお願い申し上げます。

  • MySQL
  • 回答数2
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.1

select name, number from items order by number desc limit 1; とか select name from items a, (select max(number) from items) b where a.number = b.max; ではどうでしょうか。

pochichi
質問者

お礼

なるほど!前者のやり方がありましたね^^;) 基本的な構文を使えば十分対応できるのですね。 ありがとうございました。 後者の方法も面白そうなので、試してみます。 本当にありがとうございました!

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

select `name` from `items` where `number` = ( select max(`number`) from `items` ) でいいですか?

pochichi
質問者

お礼

うまくいきました! SQLを入れ子のようにするのですね。 初心者には思いつきませんでした。 ありがとうございました。

関連するQ&A

  • DB: MySQL バージョン:5.0.45

    DB: MySQL バージョン:5.0.45 条件: NOのデータ型は、Varchar NOは、1から11まで存在しているとします。 1)Select MAX(NO+1) は、12が取得されます。 2)Select MAX(NO)+1 は、10が取得されます。 上記のような1)、2)のような違いがでる理由が知りたいです。 1)は、MySQLの仕様?で自動でint型に変換されているため、最大値11を取得し、+1をしているのでしょうか? よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • MySQLのselect文で、最大ID値のデータを呼び出す

    MySQLのテーブルのフィールド名として「ID」を登録しています。(型はint) そこで、select文で最大ID値のデータを呼び出すにはどうすればいいのか教えて頂けないでしょうか? select * from tableA ?????;

    • ベストアンサー
    • MySQL
  • varcharでの最大値抽出

    すいません。お教えください。 Mysql5.0.15で以下のテーブルを作成した時、数値の最大値(1010)を抽出したいのですがどのようにすれば抽出できるのでしょうか?お教えください。 テーブル名:B フィールド名,フィールドタイプ,備考 b_id,int(10),auto_increment b1,varchar(10) b_id,b1 1,999 2,1000 3,1000-1 4,1010 5,800 重ねて質問させてください。 select max(b1) from b;とした場合 999としか表示されません。 これもなぜなんでしょうか。

    • ベストアンサー
    • MySQL
  • MySQLのUPDATE文でサブクエリ

    MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。

    • ベストアンサー
    • PHP
  • php mysqlでのselect文について

    よろしくお願いします。 ひとつのテーブルに複数のカラムがあり、条件を抽出して合計件数を取得するには条件ごとにselect文を発行する事で実現できると思いますが、大量のselect文を発行する場合、スマートな方法があればご伝授をお願いします。 item_category   item_name フルーツ      イチゴ ドリンク       コーラ フルーツ      メロン フルーツ      イチゴ ドリンク       イチゴ ドリンク       メロン このような場合に、item_categoryフルーツの件数やitem_categoryフルーツかつitem_nameイチゴの 件数を取得できればと思います。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 複数検索時の条件分岐について

    環境:php5、mysql5 条件検索はできるのですが検索状況の違いによる条件分岐について どなたがアドバイスをお願いします。 $sql内でWHERE以降を「 if ~ else ~ 」などを使って変更するか WHILE以降を変更する気がするのですがやり方がよくわかりません。 よろしくお願いします。 以下設定 テーブル  :tbl_item [int] フィールド1:item_id [int] フィールド2:cate_id [int] ←他テーブル(名前に変換) フィールド3:item_name [varchar] フィールド4:price [decimal] フィールド5:stock_id [int]   ←他テーブル 条件1:cate_id(プルダウン)を検索条件に加えている時 $sql = "SELECT tbl_item.*, tbl_stock.item_stock FROM tbl_item LEFT JOIN tbl_stock ON tbl_item.item_id = tbl_stock.item_id WHERE tbl_item.cate_id = '" . mysql_real_escape_string( $_GET['cate_id'] ) . "' AND tbl_item.item_name LIKE '%" . mysql_real_escape_string( $_GET['item_name'] ) . "%' AND price BETWEEN '" . mysql_real_escape_string( $_GET['price_s'] ) . "' AND '" . mysql_real_escape_string( $_GET['price_e'] ) . "' ORDER BY tbl_item.item_id desk LIMIT ${_GET['page']}, ${_GET['rows']} "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); 条件2:cate_id(プルダウン)を検索条件に加えていない時 $sql = "SELECT tbl_item.*, tbl_stock.item_stock FROM tbl_item LEFT JOIN tbl_stock ON tbl_item.item_id = tbl_stock.item_id WHERE tbl_item.item_name LIKE '%" . mysql_real_escape_string( $_GET['item_name'] ) . "%' AND price BETWEEN '" . mysql_real_escape_string( $_GET['price_s'] ) . "' AND '" . mysql_real_escape_string( $_GET['price_e'] ) . "' ORDER BY tbl_item.item_id desk LIMIT ${_GET['page']}, ${_GET['rows']} "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ・ ・ アイテム数 <?= $num_rows ?> 種類 ・ ・ <? WHILE ( $item = mysql_fetch_array( $result ) ) { ?> ・ ・ ・ <? $n ++; } ?>

    • ベストアンサー
    • PHP
  • 最後のデータを含むレコード1行 MYSQL

    お世話になります。 最後の日にちを含むレコード全ての抽出方法がどうしてもわかりません。 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 4 AA 3/2 7 5 BB 3/2 4 6 AA 3/3 1 これを、select * from テーブル group by name とすると、 id name date amount 1 AA 3/1 5 2 BB 3/1 5 3 CC 3/1 5 select id, name, max(date),amount from テーブル group by name とすると、 id name date amount 1 AA 3/3 5 2 BB 3/2 5 3 CC 3/1 5 望んでいる結果はこうです。最後のdateを含むレコード全てです。 id name date amount 3 CC 3/1 5 5 BB 3/2 4 6 AA 3/3 1 select * from テーブル as a where a.date=(select max(b.date) From テーブル as b where a.id=b.id); このようにしましたが、データの数が膨大なのですごく時間がかかってしまいます。 他、シンプルな方法はないでしょうか。 よろしくお願いします。 MYSQL バージョン5.0.45

  • SELECT文の条件

    Linux + mysql4.1.22を使っています。 先ほど気が付いたのですが、テーブルsampleにフィールドid(int)がある時、 SELECT * FROM sample WHERE id='1a' とすると、id=1のデータが取得できてしまいました。 どうしてなんでしょう。ご存知の方、ご教示下さい。

    • ベストアンサー
    • MySQL
  • phpでmysqlを使ってデータベース内の最大値の取得

    PHPでMYSQL内テーブル(hogehoge)の「no」フィールドの最大値を取得をしたいのですが、ほしい結果が得られません。 【PHP】 -------------------------------------------------------------- $my_Max = "select max(no) from hogehoge"; $kekka_max = mysql_query($my_Max); -------------------------------------------------------------- no→今回最大値を取得したい項目(int) 【結果】 これをechoで出力すると、 ----------------------------- Resource id #4 ----------------------------- となってしまいます。 「no」の中の最大値を取得したいのですが、どうしたらよいでしょうか? 【環境】 WindowsXP mysql:5.0.51 php:5.2.5

    • ベストアンサー
    • PHP
  • MySQL初心者

    -mysql CREATE DATABASE testdb; use testdb; CREATE TABLE car_table(id int(10),name varchar(50)); INSERT INTO car_table VALUES (2,'乗用車'); INSERT INTO car_table VALUES (3,'オープンカー'); INSERT INTO car_table VALUES (4,'トラック'); SELECT * FROM car_table; これで間違ってるとは思わないんですが、なぜか ERROR 1049(42000): Unknown database 'testdb・・ とでます。なぜなんでしょうか?全然わかりません。 何かの設定ミスかなにかでしょうか?

    • ベストアンサー
    • MySQL