※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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のあとにカラムを計算する計算式と比較演算子を書いてあげる。

新しいものから順でgood率70%以上のものを取り出す。

SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY id DESC;

取り出したいものを制限したいならLIMIT句の追加

SELECT * FROM vote_table WHERE good/(good+bad) >= 0.7 ORDER BY id DESC  LIMIT  0,2 ;

結果の割合が多いものから70%以上のものまで順に取り出す。

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句で指定しました。色々と試してみてください。

以上