元エンジニアPMのプロダクトマネージャーお役立ち情報

スタートアップから大規模プロダクトまで担当している元エンジニアの筆者が、事業開発・プロダクトマネジメントに役立つ情報を発信します

【SQL】Where句を使った基本的な条件抽出の仕方【複数条件や単一条件】

SQLでWhere句を使って条件を絞り分析をしたい

今日はデータ分析で最も多く使われるWhere句の使い方を解説していきます。プロダクト開発や事業企画において、全てのデータの合計値や集計が必要なケースは多くありません。
購入単価を何円以上にするや、購入回数が何回から何回までの間に絞る、多国籍なプラットフォームでは国を絞るなど、何かしらの条件に絞った形でデータを抽出することがほとんどです。Where句を使えば、単一条件でも複数条件でも色々な形でデータを抽出できますので、サクッと覚えてデータ分析へ活かしましょう。

この記事では、例として複数の飲食店を運用するプロダクトをイメージし、飲食店のカテゴリーと店名、売上が管理されているデータベースを想定します。

カテゴリー 店名 売上
レストラン レストランA 10000
レストラン レストランB 20000
カフェ カフェA 5000
カフェ カフェB 8000
バー バーA 7000
カフェ カフェC 3000
レストラン レストランC 15000
バー バーB 9000
バー バーC 13000

単一条件で抽出する場合

まずはWhere句を使って単一条件で絞る場合です。カテゴリーがレストランのものだけを抽出するように文字列で絞る場合は下記のようになります。

select * from where カテゴリー = 'レストラン'

逆にカテゴリーがレストラン以外のものに絞りたい場合は、比較演算子の!=<>を使うことで除外することができます。

select * from where カテゴリー != 'レストラン' 

上記の結果と、下記の結果は同じになります。

select * from where カテゴリー <> 'レストラン'

数字などの場合は、比較演算子の>>=を使うことで、それよりも大きいや以上を表すことが出来ます。
売上が10,000円以上であれば下記のような式で表すことができます。

select * from where 売上 >= 10000

同じカラムの複数条件で抽出したい場合

例えばサンプルのテーブルのカテゴリーが100個近くあり、その中から3つのカテゴリーだけを取り出したいケースを想定してください。このように同じカラムの中から複数の値を絞りたい場合は、inを使います。

select 
 カテゴリー,
 count(1)
from table
where カテゴリー in ('レストラン','居酒屋')

例のようなクエリを実行することで、レストランと居酒屋だけのデータを集計することができます。逆に除外したい場合は、not inを使うと、レストラン・居酒屋以外のデータを抽出することができます。よく使う文法なので覚えてしまいましょう。

範囲を指定したい場合

この場合は、between句を使います。例えば売上が4000から10000までの間などで絞る場合に使えます。

select * from where 売上 between 4000 and 10000

また日付などで期間を選択する場合もbetween句で集計できます。

where 日付 between '2024-03-01 00:00:00' and '2024-03-31 23:59:59';

複数の条件(ANDやOR)に対応する場合

いままで紹介したWhere句は、いづれも単一な条件でした。例えば、レストランかつ売上が10000以上にすることや、バーまたは売上が5000以上で絞りたいなど複数の条件でANDもしくはORを使いたいときもあると思います。そんな時は下記のように、条件後に続けてandで連続していけば問題ありません。わかりやすくORのときはカッコでくくりましたが、今回のように2つの条件であれば不要です。ANDかつORなど複雑な条件をつくるときは、カッコで囲い一つの条件としてみなせるようにしましょう。

select * from table
where カテゴリー = 'レストラン'
and 売上 >= 10000
select * from table
where (カテゴリー = 'バー'
or 売上 >= 5000)

いかがでしょうか?今日は簡単なWhere句の使い方と、どういった条件の時にどう書けば良いかを解説しました。
覚えてしまえば、一生使えるテクニックなので文法と思って覚えてしまいましょう!