SQLのHANG句は、グループごとのグループの集計結果に適用される条件に基づいてグループ化されたデータをフィルタリングするために使用されます。 Count、Sum、Avg、Max、Minなどの総関数に条件を適用する場合に特に役立ちます。
Have句を使用してグループ化されたデータをフィルタリングする方法は次のとおりです。
たとえば、列のsalesperson
とamount
含むsales
と呼ばれるテーブルがあり、総売上高が10,000ドルを超える営業担当者を見つけたい場合は、次のSQLクエリを使用します。
<code class="sql">SELECT salesperson, SUM(amount) AS total_sales FROM sales GROUP BY salesperson HAVING SUM(amount) > 10000;</code>
このクエリで:
GROUP BY
、 salesperson
による販売をグループ化します。HAVING
句は、グループ化された結果をフィルタリングして、 amount
の合計が10,000ドルを超えるグループ(営業担当者)のみを含みます。WHEREおよびhase句はどちらもSQLのデータのフィルタリングに使用されますが、それらは異なる目的に役立ち、クエリ処理のさまざまな段階で適用されます。それらの間の重要な違いは次のとおりです。
アプリケーションの段階:
集計関数を使用した使用:
WHERE SUM(amount) > 10000
を書くことはできません。HAVING SUM(amount) > 10000
は、Having句の有効な使用です。実行順序:
構文と配置:
これらの違いを説明する例は次のとおりです。
<code class="sql">SELECT department, AVG(salary) AS average_salary FROM employees WHERE hire_date > '2020-01-01' -- Filters rows before grouping GROUP BY department HAVING AVG(salary) > 50000; -- Filters groups after grouping</code>
Have句は通常、グループごとのグループと併用してグループ化されたデータをフィルタリングします。ただし、句ごとにグループなしでHave句を使用することは技術的に可能ですが、特定の意味があります。
以下は、条項ごとにグループなしで節約を使用する例を示します。
<code class="sql">SELECT COUNT(*) AS total_customers FROM customers HAVING COUNT(*) > 1000;</code>
このクエリでは、Have Clauseは結果をフィルタリングして、そのカウントが1000を超える場合にのみ顧客の合計カウントを返します。グループごとのグループがないため、 customers
テーブル全体が1つのグループとして扱われます。
グループなしで使用することは可能ですが、結果セット全体を単一のグループとして明示的に操作していない限り、一般的に推奨されません。混乱につながる可能性があり、可能な場合はWhere句を使用するよりも効率が低くなります。
句の複数の条件を組み合わせるには、 AND
、 OR
NOT
な論理演算子を使用できます。これらの演算子を使用すると、複雑な条件を作成して、グループ化されたデータをより正確にフィルタリングすることができます。句の複数の条件を効果的に組み合わせる方法は次のとおりです。
使用とオペレーター:
AND
演算子は、グループが結果セットに含めるためにすべての条件が真でなければならない条件を組み合わせるために使用されます。
<code class="sql">SELECT category, COUNT(*) AS product_count, AVG(price) AS average_price FROM products GROUP BY category HAVING COUNT(*) > 10 AND AVG(price) > 50;</code>
このクエリは、10個以上の製品と50ドルを超える平均価格を備えたカテゴリをフィルターしています。
使用またはオペレーター:
OR
オペレーターは、グループが結果セットに含まれるために条件の少なくとも1つが真でなければならない条件を組み合わせるために使用されます。
<code class="sql">SELECT department, AVG(salary) AS average_salary FROM employees GROUP BY department HAVING AVG(salary) > 70000 OR COUNT(*) > 50;</code>
このクエリは、平均給与が70,000ドルを超えるか、50人以上の従業員を抱える部門をフィルターしています。
演算子ではない使用:
NOT
オペレーターは、状態を無効にするために使用されます。
<code class="sql">SELECT category, SUM(quantity) AS total_quantity FROM inventory GROUP BY category HAVING NOT (SUM(quantity) </code>
このクエリは、総量が少なくとも1000のカテゴリをフィルターしています。
組み合わせおよび:
組み合わせてOR
をAND
て、より複雑な条件を作成できます。明確さと正しい評価順序を確保するには、括弧を使用して条件をグループ化します。
<code class="sql">SELECT region, COUNT(*) AS customer_count, AVG(total_purchases) AS average_purchase FROM customers GROUP BY region HAVING (COUNT(*) > 100 AND AVG(total_purchases) > 1000) OR (COUNT(*) > 500);</code>
このクエリは、100人を超える顧客があり、平均購入が1000ドルを超える地域、または500人以上の顧客がいる地域をフィルターしています。
これらの論理演算子を効果的に使用することにより、Have句を使用してグループ化されたデータに詳細かつ正確なフィルターを作成できます。
以上がHaving句を使用してグループ化されたデータをどのようにフィルタリングしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。