MySQL countの詳細な説明と関数のサンプルコード

MySQL countの詳細な説明と関数のサンプルコード

mysql countの詳細な説明

count関数はテーブルや配列内のレコードを数えるために使われます。ここではMySQLでのcount関数の使い方を紹介します。

count(*) NULL 値が含まれているかどうかに関係なく、取得した行の数を返します。

SELECT が他の列を取得せずに 1 つのテーブルから取得し、WHERE 句がない場合、COUNT(*) は最速の速度を返すように最適化されます。

例えば:

mysql> SELECT COUNT(*) FROM student;

COUNT(DISTINCT フィールド) この最適化は MyISAM テーブルにのみ適用されます。これらのテーブル タイプは関数によって返されるレコードの正確な数を格納し、アクセスが非常に簡単だからです。

トランザクション ストレージ エンジン (InnoDB、BDB) の場合、複数のトランザクションが発生し、それぞれが行数に影響する可能性があるため、正確な行数を保存することはより困難です。

NULL 以外の異なる値の数を返します。

一致する項目が見つからない場合、COUNT(DISTINCT) は 0 を返します。

カウント データ統計を実行するためのテスト用のデータ テーブルを作成します。

テーブル `user` を作成します (
 `id` int(5) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(10) デフォルト NULL,
 `password` varchar(10) デフォルト NULL,
 主キー (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 デフォルトCHARSET=latin1

 
テストデータは次のとおりです。

1 名前1 123456
2 名前2 123456
3 名前3 123456
4 名前4 NULL

次のクエリによって返される結果に注意してください

`user` から count(*) を選択する
`user` から count(name) を選択する
`user` から count(password) を選択します

出力: 4,4,3

原因分析:

1. count(*) は行数をカウントするので、結果は 4 になります。

2. count(column_name) は、列内の空でない行をカウントします。したがって、count(name)=4、count(password)=3 になります。

count関数を使用する際は、上記2点に注意してください。

GROUP BY を使用して、各所有者のすべてのレコードをグループ化します。これがないと、次のエラー メッセージが表示されます。

mysql> SELECT 所有者、COUNT(*) FROM ペット;
エラー 1140 (42000): GROUP 列 (MIN()、MAX()、COUNT()、...) が混在しています
GROUP BY句がない場合、GROUP列なしでは不正です。

COUNT() と GROUP BY はさまざまな方法でデータを並べ替えます。次の例は、動物の調査を実施するさまざまな方法を示しています。

各動物の数:

mysql> SELECT seeds, COUNT(*) FROM pet GROUP BY seeds;
+---------+-----------+
| 種 | COUNT(*) |
+---------+-----------+
| 鳥 | 2 |
| 猫 | 2 |
| 犬 | 3 |
| ハムスター | 1 |
| ヘビ | 1 |
+---------+-----------+

性別ごとの動物の数:

mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex;
+------+----------+
| 性別 | COUNT(*) |
+------+----------+
| NULL | 1 |
| 4 |
| メートル | 4 |
+------+----------+

(この出力では、NULL は「性別不明」を意味します。)

種と性別別の動物の数:

mysql> SELECT 種、性別、COUNT(*) FROM pet GROUP BY 種、性別;
+---------+------+----------+
| 種 | 性別 | COUNT(*) |
+---------+------+----------+
| 鳥 | NULL | 1 |
| 鳥 | f | 1 |
| 猫 | f | 1 |
| 猫 | m | 1 |
| 犬 | f | 1 |
| 犬 | 男性 | 2 |
| ハムスター | f | 1 |
| ヘビ | m | 1 |
+---------+------+----------+

COUNT() を使用すると、テーブル全体を検索する必要がなくなります。たとえば、前のクエリを犬と猫のみに実行すると、次のようになります。

mysql> SELECT 種、性別、COUNT(*) FROM ペット
  -> WHERE 種 = '犬' または 種 = '猫'
  -> GROUP BY 種、性別;
+---------+------+----------+
| 種 | 性別 | COUNT(*) |
+---------+------+----------+
| 猫 | f | 1 |
| 猫 | m | 1 |
| 犬 | f | 1 |
| 犬 | 男性 | 2 |
+---------+------+----------+

または、性別がわかっている動物の性別ごとの数だけが必要な場合は、次のようにします。

mysql> SELECT 種、性別、COUNT(*) FROM ペット
  -> 性別がNULLではない場合
  -> GROUP BY 種、性別;
+---------+------+----------+
| 種 | 性別 | COUNT(*) |
+---------+------+----------+
| 鳥 | f | 1 |
| 猫 | f | 1 |
| 猫 | m | 1 |
| 犬 | f | 1 |
| 犬 | 男性 | 2 |
| ハムスター | f | 1 |
| ヘビ | m | 1 |
+---------+------+----------+

ちなみに、MySQL の DISTINCT キーワードには、予想もしなかった多くの用途があります。

1. ユニークなレコードをカウントするときに使用できます

たとえば、 SELECT COUNT( DISTINCT id ) FROM tablename;

talbebnameテーブル内の異なるIDを持つレコードの数を計算することです

2. 異なるIDの特定の値を返す必要がある場合は、

たとえば、 SELECT DISTINCT id FROM tablename;

talbebnameテーブル内の異なるIDの特定の値を返します

3. 上記の状況2は、MySQLテーブルから2列以上の結果を返す必要がある場合には曖昧になります。

たとえば、 SELECT DISTINCT id, type FROM tablename;

実際に返される結果は、id と type が同時に異なるというものです。つまり、DISTINCT は 2 つのフィールドに同時に作用し、同じ id と type を持つフィールドのみが除外されます。これは、予想した結果とは異なります。

4. 現時点では、group_concat関数を使用して除外することを検討できますが、このMySQL関数はMySQL 4.1以降でのみサポートされています。

5. 実は、別の解決策があります。

SELECT id、type、count(DISTINCT id) FROM テーブル名

返される結果には役に立たないカウントデータの列が追加されますが(おそらく、私が言及したこの役に立たないデータが必要なのでしょう)

返される結果は、異なる ID を持つすべての結果です。上記の 4 つのタイプは、相互に補完的に使用できます。必要なデータの種類によって異なります。

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

以下もご興味があるかもしれません:
  • MySQL の集計関数 count の使用法とパフォーマンスの最適化テクニック
  • MySQLのCOUNT関数の使い方の詳細な説明
  • MySQLの行数カウントに関する簡単な説明
  • MySQL カウントを向上させる方法のまとめ
  • MySQL でのフィルター条件なしのカウントの詳細な説明
  • MySQL における count(*)、count(1)、count(col) の違いのまとめ
  • MySQL の count()、group by、order by の詳細な説明
  • MySQL における distinct と count(*) の使用法の比較
  • MYSQLクエリ結果の合計行数をカウントせずにカウントする便利な方法(*)
  • MySQL の found_row() と row_count() の説明と使用方法
  • MySQL の count 関数の正しい使い方の詳細な説明

<<:  Windows で IP アドレスを指定してサーバーへのリモート アクセスを設定する方法

>>:  nodejs で worker_threads を使用して新しいスレッドを作成する方法

推薦する

CSSボックスモデルの紹介を読めば、混乱することはなくなるでしょう

Web デザインでよく耳にするプロパティ名: content、padding、border、marg...

MySQLサーバーは--read-onlyオプションで実行されているため、このステートメントを実行できません

会議中に同僚から開発ライブラリを書き込めないとの報告を受けました。エラー メッセージは次のとおりでし...

Angular 依存性注入の説明

目次概要1. 依存性注入2. Angularの依存性注入フレームワーク概要依存性注入: デザインパタ...

Linux 型バージョン メモリ ディスク クエリ コマンド紹介

1. まず、Linux システムのバージョン内容について概要を説明します。 1. カーネルバージョン...

docker-maven-pluginはイメージをパッケージ化し、プライベートウェアハウスにアップロードします。

目次1. docker-maven-pluginの紹介2. 環境とソフトウェアの準備3. デモ例3....

MySQLトリガーの使用

トリガーにより、ステートメントの実行前または実行後に他の SQL コードを実行できます。トリガーは、...

HTML DOM入門_PowerNode Javaアカデミー

DOMとは何ですか? JavaScript を使用すると、HTML ドキュメント全体を再構築できます...

HTMLはBaidu百科事典のナビゲーションドロップダウンメニュー機能を模倣します

HTML は、Baidu 百科事典のナビゲーション ドロップダウン メニュー機能を模倣します。具体的...

MySQL sql_mode の使用に関する詳細な説明

目次序文sql_mode の説明最も重要なオプションすべてのオプション要約する序文前回の記事「MyS...

MySQL ストレージ エンジンの基礎

前回の記事では、MySQL トランザクションについて説明しました。これで、MySQL トランザクショ...

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

CSSは背景画像の画面適応を実現する

ログインページなどのホームページを作成する場合、大きな背景画像を配置する必要があり、さまざまな画面の...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

Vue+Springbootでインターフェースシグネチャを実装するためのサンプルコード

1. 実装のアイデアインターフェース署名の目的は、リクエストパラメータが改ざんされていないか、リクエ...

CSS3は光る境界線効果を実現します

操作効果: html <!-- この要素は表示されません。DOM は JavaScript に...