GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数について説明する必要があります。 たとえば、SUM、COUNT、MAX、AVG などです。これらの関数と他の関数との基本的な違いは、通常、複数のレコードに対して作用することです。 bbcからSUM(人口)を選択 ここでの SUM は、返されるすべてのレコードの人口フィールドに適用され、クエリはすべての国の合計人口という 1 つの結果のみを返します。 グループ化後のスクリーニング条件であり、グループ化されたデータはグループ内でさらにスクリーニングされる。 GROUP BY 句を使用すると、SUM や COUNT などの関数をグループに属するデータに対して実行できます。 GROUP BY region を指定すると、同じ地域に属するデータのグループは 1 行の値のみを返します。 つまり、地域を除くテーブル内のすべてのフィールドは、SUM や COUNT などの集計関数によって計算された値のみを返すことができます。 HAVING 句を使用すると、データ グループをフィルターできます。 WHERE 句は、集計前にレコードをフィルタリングします。つまり、GROUP BY 句と HAVING 句の前で機能します。 HAVING 句は、集計後にグループ レコードをフィルターします。 具体的な例を通して GROUP BY 句と HAVING 句を理解し、セクション 3 で紹介した bbc テーブルを使用します。 SQLの例: 1.各地域の総人口と総面積を表示します。 地域、SUM(人口)、SUM(面積) を選択 BBCより 地域別にグループ化 まず、region を使用して、返されたレコードを複数のグループに分割します。これが GROUP BY の文字通りの意味です。グループが形成された後、集計関数を使用して、各グループ (1 つ以上のレコード) 内の異なるフィールドを操作します。 2. 各地域の総人口と総面積を表示します。面積が 1,000,000 を超える地域のみが表示されます。 地域、SUM(人口)、SUM(面積) を選択 bbc8 F4 w2 v( P- f から 地域別にグループ化 合計(面積)>1000000# ここでは、そのようなレコードがテーブルに存在しないため、where を使用して 1,000,000 を超える地域をフィルターすることはできません。 3. CUSTOMERテーブルとORDERテーブルでユーザーの注文数を照会する c.name を選択し、count(order_number) を count として、orders o、customer c から、c.id=o.customer_id で、customer_id でグループ化します。 +--------+-------+ | 名前 | カウント | +--------+-------+ | 日 | 9 | | cc | 6 | | 菩提樹の種子 | 1 | | cccccc | 2 | +--------+-------+ HAVINGフィルターを追加 c.id=o.customer_id で、count(order_number)>5 を持つ customer_id でグループ化し、orders o、customer c から c.name、count(order_number) を count として選択します。 +------+-------+ | 名前 | カウント | +------+-------+ | 日 | 9 | | cc | 6 | +------+-------+ 4. さらにいくつか例を挙げます SQL> scから*を選択します。 SNO PNOグレード ---------- ----- ---------- 1 ヤング 95 1 SX98 1 YY 90 2 ヤング89 2 SX91 2 西暦92年 3 ヤング85 3 SX88 3 西暦96年 4 ヤング 95 4 SX89 SNO PNOグレード ---------- ----- ---------- 4 88年 この表には、SNO (学生番号)、PNO (コース名)、GRADE (成績) など、各科目の 4 人の学生の学業成績の記録が記載されています。 1. 90点以上の学生のコース名とスコアを表示する //これは単純なクエリであり、グループ化クエリは使用しません SQL> grade>=90 の場合、sc から sno、pno、grade を選択します。 SNO PNOグレード ---------- ----- ---------- 1 ヤング 95 1 SX98 1 YY 90 2 SX91 2 西暦92年 3 西暦96年 4 ヤング 95 7 行が選択されました。 2. 各生徒の得点が90点を超える科目の数を表示する //グループで表示し、where 条件に従ってカウントします。SQL> select sno,count(*) from sc where grade>=90 group by sno; SNOカウント(*) ---------- ---------- 1 3 22 4 1 3 1 3. ここでは having ステートメントを使用しませんでした。次に、優秀な学生を 3 人選びたい場合、対象となるには少なくとも 2 つのコースが 90 点を超えている必要があります。対象となる学生の数と 90 点を超えるコースの数をリストします。 // グループで表示し、where 条件に従ってカウントし、having 句に従ってグループをフィルター処理します。SQL> select sno,count(*) from sc where grade>=90 group by sno having count(*)>=2; SNOカウント(*) ---------- ---------- 1 3 22 この結果が、私たちが求めているものです。「3 人の優秀な学生」賞の対象となる学生番号がリストされています。前の例と比較すると、これはグループ化後に実行されたサブクエリであることがわかります。 4. 学校では上級生を選抜しています。平均点が90点以上の学生が対象で、中国語コースの点数は95点以上である必要があります。対象学生をリストアップしてください。 // 実際、このクエリは、最初に中国語のスコアが 95 を超える学生番号を抽出し、平均を計算し、グループ化後の having ステートメントに従って平均スコアが 90 を超える学生を選択します。SQL> select sno,avg(grade) from sc where SNO IN (SELECT SNO FROM SC WHERE GRADE>=95 AND PNO='YW') group by sno having avg(grade)>=90; SNO AVG(グレード) ---------- ---------- 1 94.3333333 4 90.6666667 5. 平均点が学生ID 3の平均点以上である学生の学生IDと平均点を照会する //比較とサブクエリは、having 句で実行できます。SQL> select sno,avg(grade) from sc sno によるグループ avg(grade) > (select avg(grade) from sc where sno=3) である。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux のプロセスクラッシュの原因をコアダンプ技術を使用して追跡する簡単な分析
>>: Vue プロジェクトのパッケージ化、マージ、圧縮により、Web ページの応答速度を最適化します。
背景基本概念CSS filterプロパティは、ぼかしや色の変化などのグラフィック効果を要素に適用して...
最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...
HTML デザインパターン学習ノート今週は主にHTMLデザインパターンを学びました。学習内容をまとめ...
シンプルなリストビュー効果を実現するHTML結果: CSS スタイル ファイル listviewTe...
目次1. 例2. 兵士100人を作成する3. 質問4. 改善点5. エレガント? 6. JSの父から...
1. RTMP RTMP ストリーミング プロトコルは、Adobe が開発したリアルタイムのオーディ...
序文最近mysql /usr/local/mysql/bin/mysql -uroot -pパスワー...
「Enter != Submit」問題を実装するには、通常、「ボタンの種類」と「入力ボックスの数」か...
序文これは、オンライン コンテナーの拡張によって発生した調査です。最終的には、実際の OOM が原因...
最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...
NextCloud コンピュータ上の任意のファイルやフォルダを共有し、NextCloud サーバーと...
WeChat 8.0 アップデートの主な特徴は、アニメーション絵文字のサポートです。送信するメッセー...
なぜ Nexus プライベート サーバーを構築する必要があるのでしょうか。その理由は非常に簡単です。...
[問題の説明]アプリケーション側では、次のエラーが時々表示されます。メソッド 'mysql_...
この記事では、マウスを動かしたときにセカンダリ メニュー バーを実装するために HTML+CSS を...