「MySQLで2つ以上のカラムの内容を計算して条件に一致したレコードを取り出す方法」の編集履歴(バックアップ)一覧はこちら

MySQLで2つ以上のカラムの内容を計算して条件に一致したレコードを取り出す方法」(2015/11/06 (金) 10:55:00) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

2つ以上のカラムに入っている数値を計算して、その計算の条件にあった場合のレコードを取り出す方法について考えていきます。11月2日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *概要 一つのカラムであれば、比較演算子を使って計算していくこともできますが、二つのカラムを計算してその結果次第で 返すレコードを限定していく方法について考えます。今回は商品投票システムテーブルから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句で指定しました。色々と試してみてください。 ~ ~ 以上
2つ以上のカラムに入っている数値を計算して、その計算の条件にあった場合のレコードを取り出す方法について考えていきます。11月3日記事 ~ ~ 目次 #contents ~ ~ ---- ~ *概要 一つのカラムであれば、比較演算子を使って計算していくこともできますが、二つのカラムを計算してその結果次第で 返すレコードを限定していく方法について考えます。今回は商品投票システムテーブルから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句で指定しました。色々と試してみてください。 ~ ~ 以上

表示オプション

横に並べて表示:
変化行の前後のみ表示: