SQLでの重複データの扱い方について、基本的なカウント方法から応用的な集計テクニックまでを解説します。実務でよく使う具体例も交えて紹介していますが、あなたのプロジェクトに最適な方法は何でしょうか?
SQLで平均値を計算するAVG関数の使い方と実践例
SQLのAVG関数を使った平均値の計算方法について、基本から応用まで詳しく解説します。実務でよく使うケースや注意点など、具体的なコード例を交えながら説明していきますが、あなたはSQLで平均値を正しく扱えていますか?
AVG関数は、指定した列の平均値を計算する最も基本的な関数です。基本構文は以下のようになります:
SELECT AVG(カラム名) FROM テーブル名
具体的な使用例を見てみましょう:
-- 売上データの平均を計算する
SELECT AVG(amount) AS average_amount FROM sales
-- 部門ごとの平均給与を計算する
SELECT department, AVG(salary) AS average_salary
FROM employees
GROUP BY department
平均値の計算結果を整形するために、ROUND関数やTRUNC関数を使用することができます:
-- 小数点以下2桁に四捨五入
SELECT ROUND(AVG(salary), 2) AS rounded_avg
FROM employees
-- 小数点以下を切り捨て
SELECT TRUNC(AVG(salary)) AS truncated_avg
FROM employees
GROUP BY句を使用することで、より複雑な集計が可能になります:
-- 部門と役職ごとの平均給与を計算
SELECT
department,
position,
AVG(salary) AS avg_salary,
COUNT(*) AS employee_count
FROM employees
GROUP BY department, position
HAVING AVG(salary) > 300000
NULL値の扱いは平均値の計算結果に大きく影響します。以下のような対処方法があります:
-- NULL値を0として計算
SELECT AVG(COALESCE(value, 0)) AS average_with_zeros
FROM measurements
-- NULL値を除外して計算
SELECT AVG(value) AS average_without_nulls
FROM measurements
WHERE value IS NOT NULL
標準偏差を使用して、異常値を検出する方法を紹介します:
-- 平均値から標準偏差の2倍以上離れた値を検出
WITH stats AS (
SELECT
AVG(value) AS avg_value,
STDDEV(value) AS stddev_value
FROM measurements
)
SELECT m.*
FROM measurements m, stats
WHERE m.value > (stats.avg_value + 2 * stats.stddev_value)
OR m.value < (stats.avg_value - 2 * stats.stddev_value)
これらの方法を組み合わせることで、より正確で意味のある平均値の分析が可能になります。