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 を使用して新しいスレッドを作成する方法

推薦する

InnoDBのインデックスページ構造、挿入バッファ、適応ハッシュインデックスについての簡単な説明

InnoDB インデックスの物理構造すべての InnoDB インデックスは Btree インデックス...

MySQLのREDOログとUNDOログの詳細な説明

MySQL ログ システムで最も重要なログは、REDO ログとアーカイブ ログです。後者は MySQ...

CSS 表示属性のインラインブロックレイアウト実装の詳細な説明

CSS 表示プロパティ注: !DOCTYPE が指定されている場合、Internet Explore...

MySQL レプリケーション メカニズムの原理の説明

背景レプリケーションはデータの完全なコピーです。レプリケーションが必要な理由として、まず思い浮かぶの...

Centos7 構成 fastdfs および nginx 分散ファイル ストレージ システムの実装プロセス分析

1. libfastcommon-1.0.43 をインストールします。インストール パッケージは h...

JavaScript の navigator.userAgent がブラウザ情報を取得するケースの説明

ブラウザはおそらく私たちにとって最も馴染みのあるツールです。 Firefox、Opera、Safar...

ラベルとボタンを削除し、背景画像の点線/影を追加すると完璧な解決策になります

ユーザーが登録すると、ラベルをクリックして確認コードを変更します。クリックするとラベルに影の部分がで...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...

VMware のインストールと使用時の問題と解決策

仮想マシンは使用中であるか、接続できません次のようなエラーが報告された場合解決まずこのページにアクセ...

CentOS 7.9 の zabbix5.0.14 のインストールと設定プロセス

目次1. 基本的な環境設定2. データベースをインストールする3. zabbix関連コンポーネントを...

XHTML 入門チュートリアル: XHTML とは何ですか?

HTMLとは何ですか?簡単に言えば、HTML は Web ページを作成するために使用されます。とて...

Vue ダイナミック バインディング アイコンの完全な手順

0 アイコンと画像の違いアイコンは文字であり、画像はバイナリ ストリームです。つまり、画像はアイコン...

MySQL バージョンは、2 つのタイムスタンプ型の値をサポートしていないバージョンよりも低いです。

MySQL エラー:エラー コード: 1293 テーブル定義が正しくありません。CURRENT_T...

Linux で libudev を使用して USB デバイスの VID と PID を取得する方法

この記事では、libudev ライブラリを使用して hidraw デバイスにアクセスします。 lib...

Linuxでテキスト比較を実現するコツを教えます

序文コードを書く過程で、必然的にコードに何らかの変更を加えることになります。しかし、変更を加えるとき...