ySQL構文-COUNT()関数
データベース関連の作業では、カウントクエリが失敗することがよくあります.
以下にMySQLのサポート数を示します.
(そうではないかもしれませんが)
他のブログ記事もよく整理されていましたが、私の知らない部分なのでメニューを探しました.
MySQL 8.0メニュー—集約機能
△Aggregateはいつも韓国語に訳すのが難しいようです.
1.説明
以下(特殊)のテーブルがあると思います. id なしすべてのカラムには、 はありません.
idfirstnamelastname1JohnDoenullnullnull
最後の行には、ゴミ値を含むテーブルがあります.
次のクエリを実行します.結果は次のとおりです.結果 idfirstnamelastname1JohnDoe
ごみの値段があるかどうか分からない!
では、次のクエリーはどうですか.
NULL id以外の行は1つしかないので、正常に出力されます.
では、
うん.
つまり、count(*)は、すべての属性値が
2.COUNT()関数の実行中に発生した問題
インターンシップでは、MySQL 5.xベースエンジン(MySQL 5.xベースエンジン)を使用したテーブルにエラークエリが発生し、ロールバックできません.
要するに、ユーザーアンケートのN件を無駄にしたことがある.
(1日1回のバックアップ)
その時から、MySQLエンジンにはいろいろな種類があることに気づきました.
いずれにしても、InnoDBのようなトランザクションストレージエンジンでは、行数を正しく格納することは問題あります.同じ時間に複数のトランザクションが発生する可能性があるからです.
したがって、InnoDBは
要するに、InnoDBは、現在のトランザクションの「表示」ローの数を
InnoDBはすべてのTransaction Isolation Levelsをサポートし、デフォルトはREPEATABLE READに設定されています。
ではMYISAMはコンテキストから「保存中」行の数を推定できますよね!
MyISAMにテーブル、別のカラム、および
3.重複除外(
1つのカラムを持つ個数を数え、重複データが消去されたらどうしますか?
DISTINTを追加することで、NULL値ではなく重複除外数を得ることができます.以下に示します.
テーブル台
idfirstnamelastname1JohnDoe1JohnDoe1JohnDoe
結果(DISTINTなし)
COUNT(id)3
😏 終わった時...
初めてのテクニカルブログなので順番も脈絡も足りません.
書く方法を熟知しなければならない.
Aggretate関数ではSUM、AVG、MAX、MINなどがよく使われます!
他にもたくさんの関数があり、不思議です.(興味なし)
最後に、
以下にMySQLのサポート数を示します.
COUNT(expr) [over_clause]
このようによく使われる関数は「初期」を学習する際に学習することが多いが,初期に学習する関数では関数の原型は見られない.(そうではないかもしれませんが)
他のブログ記事もよく整理されていましたが、私の知らない部分なのでメニューを探しました.
MySQL 8.0メニュー—集約機能
△Aggregateはいつも韓国語に訳すのが難しいようです.
1.説明
SELECT
節から受け取った行컬럼명
のうち、返されるのはNULL
の数ではない.COUNT(*)
は少し異なり、NULLでもNULLでもない行の数を返します.以下(特殊)のテーブルがあると思います.
PK
拘束NOT NULL
制約idfirstnamelastname1JohnDoenullnullnull
最後の行には、ゴミ値を含むテーブルがあります.
次のクエリを実行します.結果は次のとおりです.
mysql> SELECT *
FROM mysql_test_a;
ごみの値段があるかどうか分からない!
では、次のクエリーはどうですか.
mysql> SELECT COUNT(id)
FROM mysql_test_a;
COUNT(id)1NULL id以外の行は1つしかないので、正常に出力されます.
では、
COUNT(*)
はどうですか.mysql> SELECT COUNT(*)
FROM mysql_test_a;
COUNT(id)2うん.
つまり、count(*)は、すべての属性値が
NULL
のゴミ値を含む行も返します.2.COUNT()関数の実行中に発生した問題
インターンシップでは、MySQL 5.xベースエンジン(MySQL 5.xベースエンジン)を使用したテーブルにエラークエリが発生し、ロールバックできません.
要するに、ユーザーアンケートのN件を無駄にしたことがある.
(1日1回のバックアップ)
その時から、MySQLエンジンにはいろいろな種類があることに気づきました.
いずれにしても、InnoDBのようなトランザクションストレージエンジンでは、行数を正しく格納することは問題あります.同じ時間に複数のトランザクションが発生する可能性があるからです.
したがって、InnoDBは
동시성
の問題であるため、内部に行数を保存しません(他の結果を「表示」する可能性があります).要するに、InnoDBは、現在のトランザクションの「表示」ローの数を
COUNT(*)
に返します.InnoDBはすべてのTransaction Isolation Levelsをサポートし、デフォルトはREPEATABLE READに設定されています。
ではMYISAMはコンテキストから「保存中」行の数を推定できますよね!
MyISAMにテーブル、別のカラム、および
WHERE
のセクションがない場合、演算速度は非常に速い.(ただし、MySQL 8.0.13から、InnoDBもWHERE
またはGroup by
節を最適化していますが、シングルスレッドワークロードがなければ最適化しています.何ですか?)3.重複除外(
DISTINCT
)1つのカラムを持つ個数を数え、重複データが消去されたらどうしますか?
DISTINCT
を使えばいい!DISTINTを追加することで、NULL値ではなく重複除外数を得ることができます.以下に示します.
テーブル台
idfirstnamelastname1JohnDoe1JohnDoe1JohnDoe
結果(DISTINTなし)
mysql> SELECT COUNT(id)
FROM table_name;
COUNT(id)3mysql> SELECT COUNT(DISTINCT id)
FROM table_name;
結果(DISTICTを追加)COUNT(id)3
😏 終わった時...
初めてのテクニカルブログなので順番も脈絡も足りません.
書く方法を熟知しなければならない.
Aggretate関数ではSUM、AVG、MAX、MINなどがよく使われます!
他にもたくさんの関数があり、不思議です.(興味なし)
最後に、
COUNT(DISTINCT *)
はありませんでした.どうしてないの?演算に時間がかかるかどうかは、Reference
この問題について(ySQL構文-COUNT()関数), 我々は、より多くの情報をここで見つけました https://velog.io/@petit-prince/MySQL-문법-COUNT-와-COUNTColName의-차이テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol