SQL - Having句
こんにちは、未来のSQL魔術師たち!今日は、SQLのHAVING句の世界に興味深い旅をすることになります。あなたの近所の親切なコンピュータ教師として、この冒険を一歩一歩ガイドしますので、ビルタルなメモ padsを手に取り、一緒に潜りましょう!
SQLのHAVING句
パーティを計画しているとしますが、あなたと5人以上の共通の友達がいる友人だけを招待したい場合、それはまさにSQLのHAVING句がやることです。HAVING句は、特定の条件に基づいてグループの結果をフィルタリングしてくれます。
HAVING句は、データパーティの玄関のボーイのように思ってください。あなたが設定した規則に基づいて、どのデータグループが入場できるかを決定します。以下に簡単な例を見てみましょう:
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 50000;
この例では、各部署の平均給与を見ていますが、平均給与が50,000ドル以上の部署だけを表示したい場合、HAVING句がボーイとして、各グループ(部署)をチェックし、基準を満たすものだけを許可します。
GROUP BY句とのHAVING句
HAVING句はしばしばGROUP BYと組み合わせて使われます。GROUP BYはデータをグループ化し、HAVING句はこれらのグループを条件に基づいてフィルタリングします。
もう一つの例を見てみましょう:
SELECT product_category, COUNT(*) as product_count
FROM products
GROUP BY product_category
HAVING COUNT(*) > 10
ORDER BY product_count DESC;
以下のことが起こります:
- 我们は商品をカテゴリごとにグループ化しています。
- 各カテゴリの製品数を数えています。
- HAVING句は、10以上の製品があるカテゴリだけを通過させます。
- 最後に、製品数降順で結果を並べ替えます。
これは、クローゼットを整理するのと似ていますが、10アイテム以上のセクションだけを残し、アイテム数降順に並べ替えます。
ORDER BY句とのHAVING句
前の例で見たように、HAVING句はORDER BYとも很好地組み合わされます。もう一つの例を見てみましょう:
SELECT customer_id, SUM(order_total) as total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(order_total) > 1000
ORDER BY total_spent DESC;
このクエリはVIP顧客を見つけるのに似ています:
- 注文を顧客ごとにグループ化します。
- 各顧客の支出合計を計算します。
- HAVING句は、1,000ドル以上支出した顧客だけをフィルタリングします。
- そして、支出が多い順にVIP顧客を並べ替えます。
COUNT()関数とのHAVING句
COUNT()関数はHAVING句の忠実な相棒です。以下に例を見てみましょう:
SELECT author, COUNT(book_id) as book_count
FROM books
GROUP BY author
HAVING COUNT(book_id) >= 5
ORDER BY book_count DESC;
このクエリは、多産な著者を見つけるためのものです:
- 本を著者ごとにグループ化します。
- 各著者の本の数を数えます。
- HAVING句は、5冊以上の本を書いた著者だけを残します。 4.そして、最も多産な著者から順に結果を並べ替えます。
AVG()関数とのHAVING句
AVG()もHAVING句の素晴らしい友達です。以下にその動作を見てみましょう:
SELECT department, AVG(performance_score) as avg_score
FROM employee_performance
GROUP BY department
HAVING AVG(performance_score) > 8.5
ORDER BY avg_score DESC;
このクエリは、スターのパフォーマンスを持つ部署を見つけるためのものです:
- パフォーマンススコアを部署ごとにグループ化します。
- 各部署の平均スコアを計算します。
- HAVING句は、平均スコアが8.5以上の部署だけを残します。
- そして、最も高いパフォーマンスを持つ部署から順に結果を並べ替えます。
MAX()関数とのHAVING句
最後に、MAX()とHAVING句の動作を見てみましょう:
SELECT product_category, MAX(price) as highest_price
FROM products
GROUP BY product_category
HAVING MAX(price) > 1000
ORDER BY highest_price DESC;
このクエリは、高級製品カテゴリを見つけるためのものです:
- 製品をカテゴリごとにグループ化します。
- 各カテゴリの最高価格を見つけます。
- HAVING句は、1,000ドル以上の価格がある製品を持つカテゴリだけを残します。
- そして、最も高い価格を持つカテゴリから順に結果を並べ替えます。
そして、皆さん!HAVING句とその最好的友達について学びました。練習は完璧を生みますので、これらのクエリを試してみてください。すぐにプロのように複雑なSQLクエリを書けるようになるでしょう!
以下に、私たちがカバーした方法の簡単な参照表を示します:
メソッド | 説明 | 例 |
---|---|---|
HAVING | グループ化された結果をフィルタリング | HAVING AVG(salary) > 50000 |
GROUP BY | 類似する値を持つ行をグループ化 | GROUP BY department |
ORDER BY | 結果セットを並べ替え | ORDER BY total_spent DESC |
COUNT() | 行の数を数える | HAVING COUNT(book_id) >= 5 |
AVG() | 値の平均を計算 | HAVING AVG(performance_score) > 8.5 |
MAX() | 値の最大値を返す | HAVING MAX(price) > 1000 |
快適なクエリを楽しんで、データは常にクリーンで、クエリは効率的にしてください!
Credits: Image by storyset