グループ化した結果をすべて提示するのではなく、必要なレコードだけに絞り込むこともできます。売上結果の「男女別」で試してみましょう。
- 男女別に切り分ける -
まず、売上結果を男女別に切り分けてみましょう。男女別の購買傾向がつかめます。SQLは次のようになります。GROUP BY句で「性別」を先に指定している点に注意してください。
a)
SELECT 性別, 商品名
FROM 累積売上_fx
GROUP BY 性別, 商品名
なお、以下のようなSQLでも同じ結果を得られます。
b)
SELECT 性別, 商品名
FROM 累積売上_fx
GROUP BY 商品名, 性別
ORDER BY 性別
- ORDER BY句でも同じことができる -
b)のSQLでは、GROUP BY句で「商品名」を先に記述しているので、まず商品名ごとにグループ化され、同じ商品で「性別」が異なればさらにグループ分けされるのですから、この場合は
a)の例と同じ意味合いになります。ただ、最後にORDER BY句で「性別」フィールドの値によってレコードをまとめておかないと、表示結果は男女のレコードが入り乱れてしまいます。
また、金額など他の要素もグループ化の対象にすれば、フィールドを入れ替えたときに結果が異なります。単純に2つのフィールドでグループ化する場合、グループ化の順序が入れ替わっても、最終的に整列を行って同じ結果を得ることができます。グループ化と整列は、ただレコードをまとめるという機能だけを見ればほとんど同じです。もちろん、グループ化した上でさらに整列するのは非効率ですから、先に掲げた
a)の書き方が正解なのは言うまでもありません。
- 女性だけに絞り込む -
ここまでは、全レコードを対象に処理を行ってきました。今度は、上の男女別の傾向を「女性だけ」に絞ってみましょう。グループ化したレコードを絞り込むには、HAVING句を使います。書式は以下の通りです。
SELECT <フィールドリスト>
FROM <テーブル>
GROUP BY <フィールドリスト>
HAVING <条件>
<条件>で、レコードを絞り込むための条件を指定します。この場合は、「性別」フィールドの値が'女'となっているレコードだけ取り出したいので、SQLは以下のようになります。文字列型フィールドの値は''で囲むことを、忘れないようにしましょう。
SELECT 商品名, 金額 ,性別
FROM 累積売上_fx
GROUP BY 商品名, 金額, 性別
HAVING 性別='女'
これで、画面10のように女性の購入した商品だけが抽出されました。
|
|
|