犬の来院履歴を管理するデータベースで、特定の条件に合う犬だけを抽出したい場合があります。例えば、来院回数が3回以上の犬を抽出するSQLは、集計関数とグループ化を組み合わせて簡単に実現できます。本記事ではその方法とポイントを解説します。
GROUP BYとCOUNTを使った基本的な方法
犬IDごとに来院回数をカウントし、条件を満たす犬だけを抽出するには、GROUP BYとCOUNT関数を使用します。以下のようなSQLが一般的です。
SELECT dog_id, COUNT(*) AS visit_count
FROM dog_visits
GROUP BY dog_id
HAVING COUNT(*) >= 3;
このSQLでは、dog_visitsテーブルのdog_idごとに来院数を集計し、3回以上の犬だけを抽出しています。
HAVING句の役割
WHERE句は行レベルでの条件指定に使われますが、集計後の条件指定にはHAVING句を使います。COUNT(*) >= 3のような集計条件はHAVING句で指定する必要があります。
これにより、各犬の来院回数を正しく評価して、条件を満たす行だけを返せます。
複数条件の設定例
来院回数だけでなく、特定の期間内の来院や診察内容なども条件に加えることが可能です。
SELECT dog_id, COUNT(*) AS visit_count
FROM dog_visits
WHERE visit_date >= '2025-01-01'
GROUP BY dog_id
HAVING COUNT(*) >= 3;
この例では、2025年以降に3回以上来院した犬だけを抽出できます。
実務での活用ポイント
この方法は、犬の頻繁な来院者を特定したり、キャンペーン対象の絞り込みに役立ちます。また、集計結果を別のテーブルやビューに保存して分析することも可能です。
インデックスを適切に設定しておくと、GROUP BYやWHERE句の検索性能も向上します。
まとめ
犬の来院回数が3回以上の犬を抽出するには、GROUP BYで犬IDごとに集計し、HAVING句で条件を指定するSQLが基本です。期間やその他条件も組み合わせることで、柔軟にデータを抽出できます。


コメント