MySQLの集計関数は、一連の値で計算を実行し、単一の値を返すために使用されます。最も一般的な集計関数を使用する方法は次のとおりです。
count() :この関数は、指定された条件に一致する行数を返します。式がnullでないすべての行または行のみを数えることができます。
<code class="sql">SELECT COUNT(*) FROM employees; SELECT COUNT(employee_id) FROM employees WHERE department = 'IT';</code>
sum() :この関数は、数値列の合計を計算します。ヌル値を無視します。
<code class="sql">SELECT SUM(salary) FROM employees WHERE department = 'Sales';</code>
AVG() :この関数は、数値列の平均を計算します。また、ヌル値も無視します。
<code class="sql">SELECT AVG(salary) FROM employees WHERE department = 'Marketing';</code>
min() :この関数は、指定された列の最小値を返します。
<code class="sql">SELECT MIN(salary) FROM employees;</code>
max() :この関数は、指定された列の最大値を返します。
<code class="sql">SELECT MAX(salary) FROM employees;</code>
句GROUP BY
、指定された列に同じ値を要約行にあるグループの行に合わせて、集計関数と組み合わせて使用されます。使用方法は次のとおりです。
<code class="sql">SELECT department, COUNT(*) as employee_count, AVG(salary) as avg_salary FROM employees GROUP BY department;</code>
この例では、 employees
テーブルの行はdepartment
の列によってグループ化されています。 COUNT(*)
関数は各部門の従業員数をカウントし、 AVG(salary)
各部門内の平均給与を計算します。
覚えておくべき重要なポイント:
GROUP BY
にすべての非凝集列を含める必要があります。GROUP BY
clause is typically used when you want to apply aggregate functions to grouped data.MySQLで集計関数を操作する場合、次の一般的な間違いを避けることが重要です。
グループを使用するのを忘れてください:凝集していない列をSelectステートメントに集約関数とともに含める場合、それらの列にGROUP BY
使用する必要があります。そうしないと、エラーが発生します。
<code class="sql">-- Incorrect SELECT department, COUNT(*) FROM employees; -- Correct SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
GROUP BY
を使用してください。SUM
とAVG
関数はNULL
値を無視することに注意してください。 NULL
値が重要な場合は、個別に処理する必要がある場合があります。SUM
やAVG
などの関数は、数値データを対象としています。非数値データ型(例、文字列)でそれらを使用すると、エラーまたは予期しない結果が得られます。COUNT(col_name)
は、指定された列で非ヌル値をカウントしますが、 COUNT(*)
、他の列にヌル値があるものを含むすべての行をカウントします。集計関数を使用してクエリを最適化すると、パフォーマンスが大幅に向上する可能性があります。ここにいくつかの戦略があります:
インデックスの使用:条項によるWHERE
、 GROUP BY
、およびORDER BY
に関係する列がインデックス化されていることを確認します。これにより、集約プロセスがスピードアップできます。
<code class="sql">CREATE INDEX idx_department ON employees(department);</code>
[select * : SELECT *
を使用する代わりに、必要な列のみを使用しないようにします。これにより、処理する必要があるデータの量が減少します。
<code class="sql">-- Instead of SELECT * FROM employees GROUP BY department; -- Use SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
グループの前に使用する場所: GROUP BY
適用する前に、可能な限り多くの行WHERE
できるだけ多くの行を使用します。これにより、グループ化する必要がある行数が減ります。
<code class="sql">SELECT department, COUNT(*) FROM employees WHERE salary > 50000 GROUP BY department;</code>
サブクエリまたは派生テーブルの使用を検討してください。場合によっては、最終的な集約を適用する前にサブクエリを使用してデータを事前に凝集することでパフォーマンスを向上させることができます。
<code class="sql">SELECT d.department, SUM(e.total_salary) as total_department_salary FROM ( SELECT department, SUM(salary) as total_salary FROM employees GROUP BY employee_id, department ) e JOIN departments d ON e.department = d.department GROUP BY d.department;</code>
説明: EXPLAIN
ステートメントを使用して、クエリの実行計画を分析します。これは、潜在的なボトルネックを特定し、それに応じて最適化するのに役立ちます。
<code class="sql">EXPLAIN SELECT department, COUNT(*) FROM employees GROUP BY department;</code>
これらの最適化手法を適用することにより、MySQLで集計関数を使用するクエリのパフォーマンスを大幅に向上させることができます。
以上がMySQLで集計関数をどのように使用しますか(例:Count、Sum、Avg、Min、Max)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。