SQL 集計、グループ化、並べ替え

SQL 集計、グループ化、並べ替え

1. 集計クエリ

データベースにアクセスするとき、テーブル内のデータの列に対して、合計、最大値、最小値、平均値などの統計的な要約を実行する必要があることがよくあります。このとき、集計関数を使用する必要があります。いわゆる集計関数は、要約に使用する関数です。集計とは、複数の行を 1 つの行に集約することです。

一般的な集計関数は次のとおりです。

1. COUNT関数

count関数は、テーブル内の行数をカウントするために使用されます。

たとえば、すべてのデータの行数をカウントするには、次のようにします。

SELECT COUNT(*) FROM users;

注: COUNT(*) は NULL 値を含む行の数を取得します。NULL 値を含む行を除外する場合は、count(フィールド名) を使用して NULL 値以外の行の数を取得できます。

SELECT COUNT(user_name) FROM users;

2. SUM関数

任意の列のデータの合計を計算するために使用されます。

たとえば、すべてのユーザーの年齢の合計を計算するには、次のようにします。

users から sum(age) を選択します。

3. AVG関数

任意の列のデータの平均を計算するために使用されます。

たとえば、すべてのユーザーの平均年齢を計算するには、次のようにします。

usersからAVG(age)を選択します。

4. MAX関数とMIN関数

MAX関数は任意の列のデータの最大値を計算するために使用され、 MIN関数は任意の列のデータの最小値を計算するために使用されます。

たとえば、すべてのユーザーの最大年齢と最小年齢を計算するには、次のようにします。

users から MAX(age),MIN(age) を選択します。

注: MAX 関数と MIN 関数はほぼすべてのデータ型の列に適用できますが、SUM 関数と AVG 関数は数値型の列にのみ適用できます。

2. グループクエリ

集計関数は、テーブル内のすべてのデータの統計を要約するために使用されます。GROUP GROUP BY句を使用してデータを複数のグループに分割し、統計の要約を実行することもできます。

構文形式:

SELECT <フィールド名>,... FROM <テーブル名> GROUP BY <フィールド名>,...;

たとえば、ユーザーを都市別にグループ化し、各都市のユーザーの合計をカウントします。

SELECT city,count(*) FROM users GROUP BY city;
+-------+----------+
| 都市 | カウント(*) |
+-------+----------+
| 北京 | 60 |
| 上海 | 45 |
| NULL | 80 |
| 済南 | 12 |
+-------+----------+

結果から、 NULL値を持つフィールドもグループとしてリストされることがわかります。除外したい場合は、 WHERE句を使用できます。

SELECT city,count(*) FROM users WHERE city IS NOT NULL GROUP BY city;

3. 集計結果をフィルタリングする

GROUP BY句を使用してグループ化する場合、グループ化された集計結果をフィルタリングする必要がある場合があります。最初にWHERE句の使用を考えるかもしれませんが、実際はそうではありません。代わりに、 HAVING句を使用します。 HAVINGの役割はWHEREの役割と同じで、どちらもフィルタリングですが、 WHEREはデータ行をフィルタリングするために使用され、 HAVINGグループ化された集計結果をフィルタリングするために使用されます。

たとえば、ユーザーを都市別にグループ化し、40 人を超えるユーザーを含むグループをフィルターします。

SELECT city,COUNT(*) AS num FROM users GROUP BY city HAVING num>40;

別の例:ユーザーを都市別にグループ化し、ユーザーの平均年齢が 25 歳未満のグループを除外します。

SELECT city,AVG(age) AS avg_age FROM users GROUP BY city HAVING avg_age<25;

1. HAVING句の要素

HAVING 句で使用できる要素には 3 つの種類があります。

  • 絶え間ない
  • 集計関数
  • GROUP BY句で指定された列名(つまり、集計キー)

4. クエリ結果を並べ替える

SQLクエリでソートを使用して、データを昇順 ( ASC ) または降順 ( DESC ) で並べ替えることができます。デフォルトは昇順です。

構文形式:

SELECT <フィールド名>,... FROM <テーブル名> ORDER BY <フィールド名> ASC/DESC,...;

たとえば、ユーザー テーブル内のレコードを年齢の昇順で並べ替えるには、次のようにします。

SELECT * FROM users ORDER BY age ASC;

注意:昇順の場合は ASC を省略できますが、降順の場合は DESC が必要です。

たとえば、ユーザー テーブル内のレコードを年齢の降順で並べ替えるには、次のようにします。

SELECT * FROM users ORDER BY age DESC;

1. 複数のソートキーを指定する

ORDER BY句では複数のソート キーを指定できます。たとえば、 usersテーブル内のレコードを年齢の降順、登録時間の昇順でソートするには、次のようにします。

SELECT * FROM student ORDER BY age DESC,register_time ASC;

複数のフィールドを並べ替える場合は、「,」で区切ります。

2. 集計関数を使ったソート

ORDER BY句では、集計関数の結果をソートに使用することもできます。

たとえば、ユーザーを都市別にグループ化し、各グループのユーザー数で並べ替えるには、次のようにします。

SELECT city,COUNT(*) AS num FROM users GROUP BY city ORDER BY num;

SQL の集計、グループ化、並べ替えに関するこの記事はこれで終わりです。SQL の集計、グループ化、並べ替えに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL の単一テーブル クエリ操作例の詳細な説明 [構文、制約、グループ化、集計、フィルタリング、並べ替えなど]

<<:  角度コンテンツ投影の詳細な説明

>>:  HTML の類似タグと属性の違いの詳細な説明

推薦する

MySQL の instr を使用したファジー クエリ メソッドの紹介

MySQL の内部関数instrを使用すると、従来の like クエリ メソッドを置き換えることがで...

Docker イメージを削除できません エラー: そのようなイメージはありません: xxxxxx 解決策

序文docker イメージを削除できません。docker docker imagesを確認すると、イ...

HTMLを使用して、IPを制限する投票ウェブサイトの不正行為スキームを実装する

これは、IP アドレスが制限されている投票 Web サイトの不正行為の手口です。この方法は、投票 W...

Dockerコンテナがホストポートにアクセスできない場合の解決策

最近、仕事中に問題が発生しました。Docker コンテナがホストの redis にアクセスできず、t...

mysql 一時テーブルの使用状況の分析 [クエリ結果は一時テーブルに保存できます]

この記事では、例を使用して MySQL 一時テーブルの使用方法を説明します。ご参考までに、詳細は以下...

オペレーターが知っておくべき 18 個の Nginx プロキシ キャッシュ構成のヒント (どれを知っていますか?)

アプリケーションや Web サイトのパフォーマンスが成功の重要な要素であることは誰もが知っています。...

Webデザインと制作のテスト問題と参考回答

<br />Web デザインと制作テスト パート I 多肢選択問題 1. 単一選択問題 ...

JavaScriptの記事では、Webフォームの操作方法を説明します。

1. はじめに先ほど、ウェブページの急速な発展について紹介しました。今回は、より深い内容についてお...

JavaScript 構造化代入の詳細な説明

目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...

CSV、Excel、SQL ファイルを MySQL にインポートするためのヒント

1. csvファイルをインポートする次のコマンドを使用します。 1.mysql> infile...

Linux インストール Apache サーバー構成プロセス

袋を用意するインストールApacheがすでにインストールされているかどうかを確認するrpm -qa ...

JSでユーザーを追跡する方法

目次1. 同期AJAX 2. 非同期AJAX 3. ユーザーのクリックを追跡する4. リバウンドトラ...

JavaScriptを使用して独自のAjax関数を定義する

ネイティブJSによって開始されたネットワークリクエストは、クエリ文字列の形でサーバーに送信されるため...

初心者がソースコードからMySQLのデッドロック問題を理解する

夜遅くまで何度も困難なシングルステップデバッグを行った後、ようやく理想的なブレークポイントを見つけま...

VMware15.5でcentos8.1をインストールし、物理メモリが不足する問題に対処する最も完全なチュートリアル

1. 仮想マシンの準備1. 新しい仮想マシンを作成する 2. 仮想マシンのカスタマイズを選択する 3...