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

クエリにいくつかの制限を追加するにはどうすればよいですか?

    私はあなたの質問をこのように理解しています。 2018年1月1日から2018年1月12日までの期間に3人のユーザー(user_id =1,2,3)がログインしました。これらのユーザーのうち、user_id 1は合計250回の支払いを2回行い、user_id 2は40回の支払いを1回行い、user_id 3は0回の支払いを行ったため、合計は0になります。したがって、0-200の範囲に2つの値があります。 、および200 +の範囲の1 。それが正しい理解である場合、このクエリは望ましい結果をもたらします:

    SELECT CASE  
             WHEN amount < 200 THEN '0-200'
             WHEN amount >= 200 THEN '200 +'
           END AS diapason,
           COUNT(*) AS number_of_users
    FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
          FROM activity a
          LEFT JOIN payments p ON p.user_id = a.user_id
          WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
          GROUP BY a.user_id) p
    GROUP BY diapason;
    

    出力:

    diapason    number_of_users
    0-200       2
    200 +       1
    

    SQLFiddleデモ

    更新

    合計number_of_usersで別の行を追加するには 、WITH ROLLUPを追加するだけです GROUP BYへ 条項:

    SELECT CASE  
             WHEN amount < 200 THEN '0-200'
             WHEN amount >= 200 THEN '200 +'
           END AS diapason,
           COUNT(*) AS number_of_users
    FROM (SELECT a.user_id, COALESCE(SUM(p.amount), 0) AS amount
          FROM activity a
          LEFT JOIN payments p ON p.user_id = a.user_id
          WHERE a.login_time BETWEEN '01.01.2018' AND '12.01.2018'
          GROUP BY a.user_id) p
    GROUP BY diapason WITH ROLLUP
    

    出力:

    diapason    number_of_users
    0-200       2
    200 +       1
    (null)      3
    

    アプリケーションフレームワークでは、diapasonという事実を使用できます。 値はNULLです Totalのようなものを出力します 代わりに。

    更新されたSQLFiddle

    MySQLでも同じことができます(このSQLFiddle を参照してください。 )このクエリをサブクエリとしてラップし、COALESCEを使用します diapasonで 桁。その場合、出力は次のようになります。

    diapason    number_of_users
    0-200       2
    200 +       1
    Total       3
    


    1. カンマ区切りリストMySQLのアイテムをカウントする方法

    2. Java文字列配列を使用したMysqlストアドプロシージャ

    3. MySQL重複行

    4. WHERE句の一部としてサブクエリを使用してDjangoクエリを作成するにはどうすればよいですか?