sql >> データベース >  >> RDS >> Mysql

MySQLでいくつかの値のMODE(S)を見つける簡単な方法はありますか?

    あなたは最後のクエリに非常に近いです。以下は1つを見つけます モード:

    SELECT value, occurs
    FROM (SELECT value,count(*) as occurs
          FROM t200
          GROUP BY `value`
          LIMIT 1
         ) T1
    

    ただし、あなたの質問は複数のモードに関するものだったと思います:

    SELECT value, occurs
    FROM (SELECT value, count(*) as occurs
          FROM t200
          GROUP BY `value`
         ) T1
    WHERE occurs = (select max(occurs)
                    from (select `value`, count(*) as occurs
                          from t200
                          group by `value`
                         ) t
                   );
    

    編集:

    これは、他のほとんどのデータベースでははるかに簡単です。 MySQLはどちらのwithもサポートしていません ウィンドウ/分析機能もありません。

    あなたのクエリ(以下に表示)は、あなたが思っていることをしません:

      SELECT value, occurs  
      FROM (SELECT value, count(*) as occurs
            FROM t200
            GROUP BY `value`
           ) T1
      HAVING occurs = max(occurs) ; 
    

    最後のhaving 句は変数occursを参照します ただし、max(occurs)を使用します 。 max(occurs)を使用しているため これは、サブクエリからのすべての行を要約した1つの行を返す集計クエリです。

    変数occurs グループ化には使用していません。では、MySQLはどのような値を使用しますか? 任意を使用します サブクエリの行の1つからの値。この任意の値は一致する場合と一致しない場合があります。ただし、値は1つの行からのみ取得されます。繰り返しはありません。




    1. 自己署名証明書を使用して、PostgreSQLSSL接続を錆びた状態で使用する

    2. 古いプロジェクトにTDDを実装するためのルール

    3. [ビデオ]AnsibleとPostgreSQL

    4. Dockerコンテナのmysqlデータベースへのアクセス