こんにちは!SQLを書き始めると、最初に出会う集計の手段が GROUP BY ですよね。「合計を出す」「平均を出す」といった処理にとても便利です。でも、しばらく使っていると「行を残したまま集計値も並べたい…」という場面に出会います。そこで登場するのが ウィンドウ関数 です。
この記事では、SnowflakeにおけるGROUP BYとウィンドウ関数の違いを、SQL例を交えながら初心者向けにやさしく解説します。読み終えるころには「どっちを使えばいいの?」がスッキリ判断できるようになりますよ。
GROUP BY:行をまとめて1行にする集計
GROUP BY は、指定したカラムの値ごとに行をグループ化し、1グループにつき1行に集約する仕組みです。たとえば「部署ごとの平均給与」を出すときに使います。
SELECT department,
AVG(salary) AS avg_salary,
COUNT(*) AS member_count
FROM employees
GROUP BY department;
このクエリでは department ごとに行がまとまり、結果は部署の数だけになります。元の個別の行(誰がいくらもらっているか)は見えなくなるのがポイントです。
一方、ウィンドウ関数は OVER (...) 句を伴う関数で、行を集約せずにそのまま残しつつ、各行の隣に集計結果を表示できる便利な仕組みです。
SELECT employee_name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg_salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;