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

MySQLの各グループのランニングサムを計算する方法

    まず、CTEの各月のスコアの現在の合計を計算します。
    次に、条件を適用します。

    with cte as (
      select date_format(dateOfExam, '%Y-%m') ExamMonth,
             dateOfExam, score, 
             sum(score) over (partition by date_format(dateOfExam, '%Y-%m') order by dateOfExam) total
      from student
    )
    select ExamMonth, dateOfExam, score, 
           case when sum(total >= 10) over (partition by ExamMonth order by dateOfExam) = 1 then 'Y' end Reward1,
           case when sum(total >= 20) over (partition by ExamMonth order by dateOfExam) = 1 then 'Y' end Reward2
    from cte
    

    デモ を参照してください。 。
    結果:

    > ExamMonth | dateOfExam | score | Reward1 | Reward2
    > :-------- | :--------- | ----: | :------ | :------
    > 2020-05   | 2020-05-28 |     5 | null    | null   
    > 2020-05   | 2020-05-29 |     5 | Y       | null   
    > 2020-05   | 2020-05-30 |    10 | null    | Y      
    > 2020-06   | 2020-06-03 |    10 | Y       | null   
    > 2020-06   | 2020-06-05 |     5 | null    | null   
    > 2020-07   | 2020-07-21 |    20 | Y       | Y      
    > 2020-07   | 2020-07-22 |    10 | null    | null   
    > 2020-07   | 2020-07-28 |    10 | null    | null 
    


    1. データ型、NOT NULL、およびPRIMARYKEY制約とともにテーブル内の列のリストを取得するSQLサーバークエリ

    2. データベースに保存する前にパスワードを暗号化しますか?

    3. フィールド「id」にはデフォルト値がありませんか?

    4. phpを使用してMySqlデータベースにBlobを挿入します