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

推薦する

入力ボックスのコンテンツプロンプトと非表示機能を実装する JavaScript

入力ボックスが小さい場合、内容を入力した後に、入力内容が拡大されたプロンプト ボックスを表示したいこ...

Ubuntuのソースリスト(ソースリスト)を変更する方法詳細説明

導入Ubuntu のデフォルトのソースは国内サーバーではないため、更新されたソフトウェアのダウンロー...

MySQL トランザクションの詳細

目次導入取引の4つの特徴トランザクション分離レベル確認するMVCC現在の読書スナップショット読み取り...

Struts2 ジャンプ後に CSS と JS が無効になる問題の解決策のアイデアと実装手順

struts2 アクションの実行後にジャンプした jsp が表示されると、css が機能しません。問...

MySQL 接続クエリを本当に学びましたか?

1. 内部結合クエリの概要内部結合は、アプリケーションで非常に一般的な結合操作であり、通常はデフォ...

プロセスごとにネットワーク帯域幅を監視する Linux ツール Nethogs のインストールと展開

概要Linux 用のオープン ソース ネットワーク監視ツールは数多くあります。たとえば、帯域幅の使用...

mysql5.7 の新しい json フィールド タイプの使用例の分析

この記事では、MySQL 5.7 で追加された json フィールド タイプの使用方法を例を使って説...

Linux スワップ パーティション (詳細説明)

目次リナックス1. SWAPとは2. swappiness は何を調節しますか? 3. スワップ操作...

ウェブデザインの初心者に役立つ学習教材をいくつかお勧めします

勉強中に読んだ本についてもよく聞かれます。以下は初心者におすすめの本です(私が勉強中に読んだ本です。...

JavaScript におけるイベント委譲メカニズムと深いコピーと浅いコピーの簡単な分析

目次1. イベントの委任イベントバブリングイベントキャプチャイベントの泡立ちの昇華考える2. 深いコ...

MySQL の結合クエリとサブクエリの問題

目次複数テーブル結合の基本構文クロス結合と直積現象クロスコネクトデカルト積現象内部結合外部結合左外部...

Mysql テーブルで利用可能な最小 ID 値を照会する方法

今日、研究室のプロジェクトを見ていたとき、私にとって「難しい」問題に遭遇しました。実は、それは私があ...

JavaScriptは組み込みオブジェクトのプロトタイプメソッド実装を追加します

オブジェクトがメソッドを呼び出す順序:インスタンス内にメソッドが存在しない場合は、インスタンス オブ...

JavaScriptアニメーション関数のカプセル化の詳細な説明

目次1. アニメーション機能の原理2. アニメーション関数のシンプルなカプセル化3. アニメーション...

Azure Container Registry を使用してイメージを保存する際の問題

Azure Container Registry は、Docker Registry 2.0 仕様に...