ySQL構文-COUNT()関数


データベース関連の作業では、カウントクエリが失敗することがよくあります.
以下にMySQLのサポート数を示します.
COUNT(expr) [over_clause]
このようによく使われる関数は「初期」を学習する際に学習することが多いが,初期に学習する関数では関数の原型は見られない.
(そうではないかもしれませんが)
他のブログ記事もよく整理されていましたが、私の知らない部分なのでメニューを探しました.
MySQL 8.0メニュー—集約機能
△Aggregateはいつも韓国語に訳すのが難しいようです.
1.説明SELECT節から受け取った行컬럼명のうち、返されるのはNULLの数ではない.COUNT(*)は少し異なり、NULLでもNULLでもない行の数を返します.
以下(特殊)のテーブルがあると思います.
  • id PK拘束
  • なし
  • すべてのカラムには、NOT NULL制約
  • はありません.
    idfirstnamelastname1JohnDoenullnullnull
    最後の行には、ゴミ値を含むテーブルがあります.
    次のクエリを実行します.結果は次のとおりです.
    mysql> SELECT *
      FROM mysql_test_a;
  • 結果
  • idfirstnamelastname1JohnDoe
    ごみの値段があるかどうか分からない!
    では、次のクエリーはどうですか.
    mysql> SELECT COUNT(id)
      FROM mysql_test_a;
    COUNT(id)1
    NULL 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)3
    mysql> SELECT COUNT(DISTINCT id)
    	FROM table_name;
    結果(DISTICTを追加)
    COUNT(id)3
    😏 終わった時...
    初めてのテクニカルブログなので順番も脈絡も足りません.
    書く方法を熟知しなければならない.
    Aggretate関数ではSUM、AVG、MAX、MINなどがよく使われます!
    他にもたくさんの関数があり、不思議です.(興味なし)
    最後に、COUNT(DISTINCT *)はありませんでした.どうしてないの?演算に時間がかかるかどうかは、