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

MySQL-重複する値ごとにカウンターを取得します

    残念ながら、MySQLには必要なウィンドウ機能がありません。したがって、次のようなものを使用する必要があります:

    最終クエリ

    select data, group_row_number, overall_row_num
    from
    (
      select data,
            @num := if(@data = `data`, @num + 1, 1) as group_row_number,
            @data := `data` as dummy, overall_row_num
      from
      (
        select data, @rn:[email protected]+1 overall_row_num
        from yourtable, (SELECT @rn:=0) r
      ) x
      order by data, overall_row_num
    ) x
    order by overall_row_num
    

    SQL Fiddle withDemo を参照してください。

    説明:

    まず、内部選択。これにより、模擬のrow_numberが適用されます。 テーブル内のすべてのレコードに( SQL Fiddle with Demo を参照) ):

    select data, @rn:[email protected]+1 overall_row_num
    from yourtable, (SELECT @rn:=0) r
    

    クエリの2番目の部分では、テーブル内の各行を次の行と比較して、同じ値であるかどうかを確認します。同じ値でない場合は、group_row_numberを開始します。 以上( SQL Fiddle withDemo を参照してください。 ):

    select data,
          @num := if(@data = `data`, @num + 1, 1) as group_row_number,
          @data := `data` as dummy, overall_row_num
    from
    (
      select data, @rn:[email protected]+1 overall_row_num
      from yourtable, (SELECT @rn:=0) r
    ) x
    order by data, overall_row_num
    

    最後に選択すると、必要な値が返され、要求した順序に戻されます。

    select data, group_row_number, overall_row_num
    from
    (
      select data,
            @num := if(@data = `data`, @num + 1, 1) as group_row_number,
            @data := `data` as dummy, overall_row_num
      from
      (
        select data, @rn:[email protected]+1 overall_row_num
        from yourtable, (SELECT @rn:=0) r
      ) x
      order by data, overall_row_num
    ) x
    order by overall_row_num
    


    1. Oracleのifステートメントのクエリを更新します

    2. ユーザー定義タイプがPostgreSQLにすでに存在するかどうかを確認します

    3. OracleのSQLクエリからの結果を連結します

    4. MySQLのsourceコマンドを使用してWindowsに大きなファイルをインポートするにはどうすればよいですか