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

推薦する

nginxでの共有メモリの使用に関する詳細な説明

nginx プロセス モデルでは、トラフィック統計、トラフィック制御、データ共有などのタスクを完了す...

Vue の新しい組み込みコンポーネントの使用方法の詳細な説明

目次1. テレポート1.1 テレポートの紹介1.2 テレポートの使用1.3 プレビュー効果2. サス...

Redis イメージの Docker インストールと設定手順

目次序文環境インストールMySQLコンテナを作成して起動する落とし穴を避けるための注意MySQLコン...

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

Linux 負荷分散 LVS の詳細な理解

目次1. LVS 負荷分散2. 負荷分散LVSの基本紹介3. LVSアーキテクチャ3.1 ロードバラ...

MySQL 5.7.21 winx64 グリーンバージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 5.7.21のインストールと設定方法を記録しています。具体的な内容は以下のと...

HTML テーブルタグチュートリアル (27): セルの背景画像属性 BACKGROUND

セルの背景画像を設定でき、任意の GIF または JPEG 画像ファイルを使用できます。基本的な構文...

SpringbootはDockerデプロイメントを統合し、Dockerイメージを構築する2つの方法を実装します。

Docker は、あらゆるアプリケーション用の軽量でポータブルな自己完結型コンテナーを簡単に作成で...

HTML の表のフレームとルール属性の詳細な説明

テーブル タグの frame 属性と rules 属性は境界線の表示を制御できます。フレーム プロパ...

VueはGraphVisを使用して無限に拡張された関係グラフを開発します

1. GraphVis 公式サイトにアクセスして、対応する js をダウンロードします。js の新し...

スクロール時に選択領域のフォント色を暗くするために CSS を使用するサンプルコード

日付ピッカーをカプセル化する場合、選択時にフォントの色を暗くする必要があります。実装後の効果を見てみ...

JSホモロジー戦略とCSRFの詳細な説明

目次概要同一生成元ポリシー (SOP)相同制限クロスドメインをバイパスクロスサイトリクエストフォージ...

JPG、GIF、PNGなどのさまざまな画像形式の詳細な説明

ウェブページ上の画像が一般的に jpg、gif、png 形式であることは誰もが知っています。それらの...

CSS に基づいて MaterialUI ボタン​​クリックアニメーションを実装し、それを React コンポーネントにカプセル化します。

序文フロントエンドフレームワークのヘビーユーザーとして、私はテクノロジーを選択する際にそのエコロジー...

CentOS7にPHP7 Redis拡張機能をインストールする方法

導入前回の記事では、Redis をインストールして設定しましたが、まだ終わりではありません。PHP ...