アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のようなテーブルで

DROP TABLE IF EXISTS tbl;

CREATE TABLE IF NOT EXISTS tbl (
id int(11) NOT NULL,
type ENUM('a', 'b', 'c') NOT NULL DEFAULT 'a',
val1 int NOT NULL,
val2 double NOT NULL,
PRIMARY KEY(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO tbl (id, type, val1, val2) VALUES (1, 'a', 150, 1.5);
INSERT INTO tbl (id, type, val1, val2) VALUES (2, 'b', 50, 0.3);
INSERT INTO tbl (id, type, val1, val2) VALUES (3, 'c', 5, 0.5);
INSERT INTO tbl (id, type, val1, val2) VALUES (4, 'b', 30, 0.1);

idが4の場合のval2を、それまで(idが1~3)のtypeが'a'と'b'のval1の合計で割った値を求めたいですが、
この例だと

0.1÷(150+50)=0.0005

という結果を得たいのです。
どのようなSQL文にすれば良いのでしょうか?

A 回答 (2件)

select id,val2/(select sum(val1) from tbl where type in ('a','b') and id<4) as val


from tbl where id=4

場合によっていはidの値:4の部分を共通化してこう

select id,val2/(select sum(val1) from tbl where type in ('a','b') and id<(select @a from (select @a:=4) as dummy)) as val
from tbl where id=@a
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど、上のSQL文で求めていた結果が得られました。
ありがとうございます。
ところで、下のSQL文なのですが、これをそのまま実行すると
「返り値が空でした (行数 0)。」
という結果が返ってくるのですが、この文はどのようにして実行すれば良いのでしょうか?

お礼日時:2017/08/14 15:58

> ところで、下のSQL文なのですが、これをそのまま実行すると


> 「返り値が空でした (行数 0)。」

MySQLのバージョンによっては使える場合とそうでない場合があるようです
ブレをなくしたいならやはり前者をつかってください
    • good
    • 0
この回答へのお礼

ご返信ありがとうございます。
なるほど、バージョンによっては実行できるわけですね。
ちなみにこちらのバージョンは5.6.16でした。
参考になりました。

お礼日時:2017/08/14 16:19

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