MySQLの演算について質問です。


SELECT *,(anda/dasuu) AS daritu FROM baseball WHERE daritu<'0.3';

のようにして打率を出しています。
しかし、WHEREを入れるとエラーになります。

書き方が悪いと思うのですが、ご指摘いただけないでしょうか?

また、darituフィールドを作成する時、小数点第2位まで
SQL文だけで絞る方法があれば、教えて下さい。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/10/08 22:21:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:mass3 No.1

回答回数118ベストアンサー獲得回数15

ポイント10pt

daritu は数値型だから、where句で条件を書くときにシングルクォートが要らないと思います。

SELECT *,(anda/dasuu) AS daritu FROM baseball WHERE daritu < 0.3;

id:kt26

ありがとうございます。ただ、なぜかエラー(queryが実行出来ない)になります。

2007/10/08 21:56:34
id:whitecat77 No.2

回答回数32ベストアンサー獲得回数2

ポイント10pt

MySQLのバージョンが4.1以上でしたら、副問合わせが可能です。

一度、darituを含んだテーブルを作成し、そこから*で引っ張ってくることで実現できると思います。


また、小数点第2位まで絞る方法としては、

切り捨ての場合はtruncate(数値、小数点以下の位)という関数を用いて書くことができます。


以上を合わせると・・・

SELECT * from

(SELECT *, truncate(anda/dasuu, 2) AS daritu FROM baseball )

WHERE daritu<'0.3';


四捨五入はround(数値、小数点以下の位)というのがありますが、

これは動作が環境に依存するようですので、結果が予想通りにならないことがあるようです。

id:Mook No.3

回答回数1314ベストアンサー獲得回数393

ポイント80pt

先ほどは、ガセのコメント失礼しました。

(0.3 でも '0.3'でも動作しますね。)


http://dev.mysql.com/doc/refman/4.1/ja/select.html

にあるように、WHERE 句ではエイリアス名は使えないようです。


なので今回の場合は面倒でも、

select *, round(anda/dasuu,2 ) as daritsu from baseball where round(anda/dasuu,2 ) < 0.3;

のように同じ表記を WHERE 句に書く必要があります。


あっ、ちなみに2桁の表記は上記にあるとおりです。

id:kt26

ありがとうございます。希望通りの結果を得ることが出来ました。


エイリアス名が指定出来ないから表示出来なかったんですね。。

大変勉強になりました。

2007/10/08 22:20:37
id:whitecat77 No.4

回答回数32ベストアンサー獲得回数2

ポイント10pt

すみません。

SELECT * from

(SELECT *,(anda/dasuu) AS daritu FROM baseball) a

WHERE daritu < 0.3;

ですね。

副問い合わせのテーブルに何か名前(ここではa)をつけないとエラーになりますね。

  • id:Mook
    WHERE 区でエイリアスの使用ができないのは、実行時点でカラム値がまだ判別されないことがあるためで、whitecat77 さんのようにサブクエリ内で定義すれば使用可能のようですね。
  • id:chuken_kenkou
    MySQL 4.1以降なら、インラインビューで別名を付ける方法にすれば、インラインビュー中で指定した仮想の列名で、検索条件を指定できます。

    select *
    from (select round((anda/dasuu),2) AS daritu FROM baseball) as x
    where daritu<0.3
    ;

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません