2つ以上のカラムに入っている数値を計算して、その計算の条件にあった場合のレコードを取り出す方法について考えていきます。11月3日記事
目次
一つのカラムであれば、比較演算子を使って計算していくこともできますが、二つのカラムを計算してその結果次第で
返すレコードを限定していく方法について考えます。今回は商品投票システムテーブルからgood率70%以上のものを取り出す方法を具体例として取り上げていきたいと思います。
CREATE TABLE vote table( id INT NOT NULL AUTO_INCREMENT, item VARCHAR(255) NOT NULL, good INT NOT NULL, bad INT NOT NULL, PRIMARY KEY(id) );
※最初like,dislikeにしようとしたが、likeが予約語なためできなかった。バッククオートで囲めば一応likeも通ります。
INSERT INTO vote_table (item,good,bad) values('item1',80,30); INSERT INTO vote_table (item,good,bad) values('item2',50,50); INSERT INTO vote_table (item,good,bad) values('item3',40,70); INSERT INTO vote_table (item,good,bad) values('item4',80,20); INSERT INTO vote_table (item,good,bad) values('item5',100,0); INSERT INTO vote_table (item,good,bad) values('item6',75,25); INSERT INTO vote_table (item,good,bad) values('item7',90,10); INSERT INTO vote_table (item,good,bad) values('item8',10,90);
SELECT * FROM vote_table WHERE good/(good+bad) >=0.7;
WHEREのあとにカラムを計算する計算式と比較演算子を書いてあげる。
SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY id DESC;
SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY id DESC LIMIT 0,2 ;
SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY good/(good+bad) DESC;
SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY good/(good+bad) DESC LIMIT 0,2;
カラム同士の計算方法と比較演算子を使ってWHERE句で指定しました。色々と試してみてください。
以上