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

SUM(users_count)が1000に達するまで選択するSQLクエリ

    このソリューションは累積合計を実行し、合計が1000を超えると停止します:

    SELECT NULL AS users_count, NULL AS total
      FROM dual
     WHERE (@total := 0)
     UNION
    SELECT users_count, @total := @total + users_count AS total
      FROM messages_queue
     WHERE @total < 1000;
    

    つまり、たとえば800の2つの値がある場合、合計は1600になります。最初のSELECTは、@totalを初期化するだけです。 変数。

    単一の行の値が1000を超える場合を除いて、合計が1000を超えないようにする場合は、厳密なテストを行う必要がありますが、これは機能すると思います。

    SELECT NULL AS users_count, NULL AS total, NULL AS found
      FROM dual
     WHERE (@total := 0 OR @found := 0)
     UNION
    SELECT users_count, @total AS total, @found := 1 AS found
      FROM messages_queue
     WHERE (@total := @total + users_count)
       AND @total < 1000
     UNION
    SELECT users_count, users_count AS total, 0 AS found
      FROM messages_queue
     WHERE IF(@found = 0, @found := 1, 0);
    


    1. SQLステートメントですべてのパラメーターが使用されたわけではありません(Python、MySQL)

    2. mysqlデータベースが存在するかどうかを確認し、結果に基づいてアクションを実行します

    3. SQL-1つのクエリで複数のレコードを更新します

    4. リモートで関連するテーブルから値をチェックするためのCONSTRAINT(結合などを介して)