犬テーブルと飼い主テーブルを結合して、各飼い主ごとに飼っている犬の頭数や平均体重を求めたい場合、SQL ServerのGROUP BY句を活用すると簡単に集計できます。この記事では具体例を交えて解説します。
テーブル構造の例
まず前提として、以下のようなテーブルがあるとします。
-- 飼い主テーブル CREATE TABLE Owners (OwnerID INT PRIMARY KEY, OwnerName NVARCHAR(50)); -- 犬テーブル CREATE TABLE Dogs (DogID INT PRIMARY KEY, DogName NVARCHAR(50), OwnerID INT FOREIGN KEY REFERENCES Owners(OwnerID), Weight DECIMAL(5,2));
Ownersテーブルに飼い主情報、Dogsテーブルに犬の情報が格納されています。
飼い主ごとの集計クエリ
飼い主ごとに犬の頭数と平均体重を求めるには、以下のようにGROUP BYを使用します。
SELECT o.OwnerID, o.OwnerName, COUNT(d.DogID) AS DogCount, AVG(d.Weight) AS AvgWeight FROM Owners o LEFT JOIN Dogs d ON o.OwnerID = d.OwnerID GROUP BY o.OwnerID, o.OwnerName ORDER BY o.OwnerID;
このクエリのポイントは以下です。
- LEFT JOINを使用することで、犬を飼っていない飼い主も結果に含める
- COUNT(d.DogID)で犬の頭数をカウント
- AVG(d.Weight)で平均体重を計算
- GROUP BYで飼い主ごとに集計
実例
例えば、飼い主Aが2匹の犬(体重5.0kgと7.0kg)、飼い主Bが1匹の犬(体重4.5kg)を飼っている場合、クエリ結果は以下のようになります。
OwnerID | OwnerName | DogCount | AvgWeight 1 | 飼い主A | 2 | 6.0 2 | 飼い主B | 1 | 4.5
ポイントと応用
・AVG関数やCOUNT関数を他の集計関数に置き換えれば、最大体重や最小体重なども取得可能です。
・WHERE句を組み合わせれば、特定条件の犬だけ集計することもできます。
まとめ
SQL Serverで飼い主ごとに犬の頭数と平均体重を求める場合、LEFT JOINとGROUP BYを活用することで簡単に集計可能です。この方法を応用すれば、他のペット管理や顧客データの集計にも利用できます。


コメント