こんにちわSuです。
今回は、「SQLでSelectした結果からランダムに10件データを取るには?」に答えます。
結論はコレ
MySQLバージョン
SELECT * FROM テーブル名
ORDER BY RAND()
LIMIT 10;
PostgreSQLバージョン
SELECT * FROM テーブル名
ORDER BY RANDOM()
LIMIT 10;
結論は出ましたが、どんな時に使うか、メリット・デメリットについて書いていきたいと思います。
ランダムで10件取得するメリットは?
例えば、「本番データからランダムでデータを10件サンプリングして、内容を見たい」と言った要求があった場合、皆さんならどうしますか?
1個ずつ適当に取得しますか?何かしらの条件を付けて取得しますか?
要求次第ではそれも良いかなと思います。ただ、意図したデータではランダムにならないことがありますし、条件を確認したり、決めたりするのは時間がかかります。
条件なしにランダムに取ってくれるこのSQLはそんなときに非常に重宝すると思います。
また、1個ずつ頑張って抽出した後に、
「10件じゃなくて、100件欲しいのだけど」
って言われた日には目もあてられません。ランダムなデータを取得するSQLを覚えておくだけで、幸せになれそうですね。
ランダムで10件取得するデメリットは?
デメリットについても考えてみましょう。SQLはどこかのデータベースにアクセスして実行すると思います。
ランダムデータを取得するSQLは、「パフォーマンスを考慮していないとデータベースに負荷がかかる」ということを覚えておきましょう。
先ほど紹介したSQLですが、この対象テーブルに1億レコード入っていたら、どうなるでしょうか?1億レコードに対してランダムな10件を探しに行くという非常に負荷のかかりそうなクエリになります。
SELECT * FROM テーブル名
ORDER BY RAND()
LIMIT 10;
本番稼働していないデータベースサーバでの実行であれば、問題ないかもしれません。ただ、全く影響がないとも言えないので、実行する前に負荷がかからないか確認し、必要であれば条件を変えて実行すると良いでしょう。
最後に
SQLは強力なツールです。開発者でなくとも概念や実行方法を知っておくと役に立つ場面が多いなぁと仕事をしていて感じます。
ぜひ、みなさんもSQLを使いこなして、快適な開発ライフを過ごしていきましょう!