SQL学習シリーズ④:GROUP BY句
はじめに
SELECT WHERE ORDER BY LIMITと来たら次はGROUP BYですね。主にデータの集約に使われます。
基本構文
SELECT company, COUNT(DISTINCT name) FROM users GROUP BY company;
対象とするカラムにA社が5個、B社が12個みたいな状況が起きている時に合体させることができます。
注意事項
基本的に表示するカラムが集約されている必要があります。そのため上の場合にSELECT内にまとめられないカラムを仕込んでいるとエラーを起こします。
まとめたい場合はGROUP BYに集約関数以外のカラムも記載するようにしてください。
またWHERE句でも記載しましたがGROUP BY句はWHERE句の後に読むため集約系をWHEREで扱うことができません。そんな時のためにHAVING句が存在します。
HAVING句
やることは集約したことに対してのさらなる条件下です。
SELECT company, COUNT(DISTINCT name) FROM users GROUP BY company HAVING COUNT(name) > 2;
前述したとおりにWHERE句を考慮した上でちょっと扱うオン難しいなって時に使うものです。多少遅くなるのは否めませんので、私がまだ未勉強なパフォーマンス部分でいずれこのあたり話したりしますかね?
とりあえず今日はこんな感じで