COUNT、SUM、AVG、MIN、MAX
5つの基本的な集約関数を使い、COUNT(*)とCOUNT(column)の違い、および各関数でNULLがどう扱われるかを理解します。
「COUNT、SUM、AVG、MIN、MAX」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。
集約関数の役割
集約関数は、多数の行を1つの値にまとめます。例として、総収益、平均評価、最新の日付などがあります。
COUNT
行を数えます。2種類あります。
SELECT COUNT(*) FROM users; -- counts ALL rows
SELECT COUNT(email) FROM users; -- counts rows where email IS NOT NULL
SELECT COUNT(DISTINCT country) FROM users; -- distinct non-NULL countriesSUM
数値列を合計します。NULLは無視されます。
SELECT SUM(total) FROM orders;
SELECT SUM(total) FROM orders WHERE user_id = 42;AVG
算術平均を計算します。NULLは無視されるため、AVG(x)はSUM(x)/COUNT(x)と等しく、SUM(x)/COUNT(*)とは異なります。
SELECT AVG(rating) FROM reviews;MINとMAX
NULLではない値の最小値と最大値を求めます。数値、日付、文字列など、比較可能なものに使用できます。
SELECT MIN(created_at), MAX(created_at) FROM orders;
SELECT MIN(name), MAX(name) FROM users; -- alphabetic集約関数とNULL
COUNT(*)を除くすべての集約関数は、入力されたNULLを無視します。AVG、SUM、MIN、MAXは、NULLではない入力が存在しない場合にNULLを返します。
-- Suppose the table is empty or all rating is NULL:
SELECT AVG(rating) FROM reviews; -- NULL集約関数の組み合わせ
1つのクエリで複数の集約関数を使用できます。すべて同じグループを対象にします。
SELECT COUNT(*) AS orders,
SUM(total) AS revenue,
AVG(total) AS avg_order,
MIN(total) AS smallest,
MAX(total) AS biggest
FROM orders
WHERE created_at >= NOW() - INTERVAL '30 days';集約関数内でのDISTINCT
集約する前にDISTINCTを適用します。
SELECT COUNT(DISTINCT user_id) AS unique_buyers,
SUM(DISTINCT total) AS sum_of_distinct_totals
FROM orders;GROUP BYなしの集約
GROUP BYなしで集約関数を使用すると、結果セット全体が1つの大きなグループになります。そのため、出力される行は1行です。
集約前のフィルタリング
WHEREは、集約される前に入力行を絞り込みます。
-- Average of only large orders:
SELECT AVG(total) FROM orders WHERE total > 100;FILTER句(PostgreSQL)
FILTER句を使って、集約関数ごとにフィルターを追加します。
SELECT
COUNT(*) AS total_orders,
COUNT(*) FILTER (WHERE status = 'paid') AS paid_orders,
SUM(total) FILTER (WHERE status = 'paid') AS paid_revenue
FROM orders;まとめ
基本的な5つの集約関数は、COUNT, SUM, AVG, MIN, MAXです。
- COUNT(*)は行を数え、COUNT(col)はNULLを無視する
- その他の集約関数はNULLの入力を無視する
- WHERE / FILTERと組み合わせて条件付き集約を行う
クイックチェック
ratingが500行中100行でNULLだとします。このときAVG(rating)は何で割りますか。
よくある質問
「COUNT、SUM、AVG、MIN、MAX」レッスンは無料ですか?
はい。「COUNT、SUM、AVG、MIN、MAX」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。
「COUNT、SUM、AVG、MIN、MAX」で何を学びますか?
5つの基本的な集約関数を使い、COUNT(*)とCOUNT(column)の違い、および各関数でNULLがどう扱われるかを理解します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
SQL Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「COUNT、SUM、AVG、MIN、MAX」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSQL Academyレッスンでコードを書いて実行できますか?
はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- COUNT、SUM、AVG、MIN、MAX
- 単一列・複数列のGROUP BY
- HAVINGとWHEREの違い
- よくある落とし穴:集約におけるNULL