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

推薦する

Ubuntu の Python で C/C++ メソッドを呼び出すダイナミック リンク ライブラリの詳細な説明

ブーストをインストールPython から C/C++ を呼び出す方法はたくさんあります。この記事では...

MySQL テーブル作成外部キー エラーの解決方法

データベーステーブルA: テーブル task_desc_tab を作成します ( id INT(11...

MySQLはデータ復旧を実装するためにbinlogログを使用する

MySQL binlog は MySQL ログの中で非常に重要なログであり、データベースのすべての ...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

CSSはクーポンスタイルを実装するために放射状グラデーションを使用します

この記事では、CSS で放射状グラデーションを使用して、次の図に示すクーポン スタイルの効果を実現す...

MySQL マスタースレーブレプリケーション切断の一般的な修復方法

目次01 問題の説明02 ソリューション1. 他のスレーブライブラリを見つけてすぐに置き換える2. ...

Docker コンテナ入門から夢中になるまで(推奨)

1. Docker とは何ですか?仮想マシンについては誰もが知っています。Windows に Li...

MySQL 単一テーブルクエリの例の詳細な説明

1. データを準備するこのテーブルでは次の操作が実行されます 学生テーブルを作成 ( id int ...

シンプルなドラッグ効果を実現するJavaScript

この記事では、簡単なドラッグ効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

CentOS 7でsambaを使用してフォルダーを共有するための完全な手順

序文Samba は、サーバー プログラムとクライアント プログラムで構成され、Linux システム上...

純粋な CSS を使用してユーザーが Web ページのコンテンツをコピーするのを防ぐ方法

序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...

Vueのキャッシュ方法の例の詳細な説明

最近、「フロントエンドキャッシュ」という新しい要件が作成されました要件背景: フォームへの高頻度の繰...

HTML/CSS での空白処理とページ内の空白を保持する方法

HTML の空白ルールHTML では、コンテンツ内の複数のスペースは通常 1 つとみなされ、連続する...

MySQLのSQLモードの特徴のまとめ

序文SQL モードは、MySQL がサポートする SQL 構文と、実行されるデータ検証チェックに影響...