根据使用mysql或php在特定年份注册的班级学生查找课程费用总额

我计算的是每个班级和学生在他或她参加过的课程中所支付的总金额,具体取决于学年.

现在,下面的学生班级表有两名学生,学生ID = 0001的学生已在两个不同年份的两个班级注册,班级ID = 1,年份= 2013年,班级ID = 2,年份= 2014.

但是,学生ID = 0002的学生只参加了一个班级,他离开了学校.另一名学生在课堂上报名参加
年份= 2014年的班级ID = 1

    Student Class Table
    |   Student ID  |   Class ID    |   Year    |
    |      0001     |      1        |   2013    |
    |      0002     |      1        |   2013    |
    |      0003     |      1        |   2014    |
    |      0001     |      2        |   2014    |

以下是在特定时期内为每个班级分配给每个学生的金额.

    Designated Fees
    |   Class ID    |   Amount  |   Year    |
    |    1          |    100    |   2013    |
    |    1          |    120    |   2014    |
    |    2          |    210    |   2014    |

现在,我想找出每个“班级”在本年度(因此在2014年)支付的总金额,以及每个班级在上一年度支付的总和(在这种情况下,2013年是上一年度和上一年度(在这种情况下,2014年是当前年份).

使用以下查询将为您提供每位学生从他们/她在那里注册的前一年和当前年度支付的金额.

此查询可以毫无问题地提供良好的结果

        SELECT 
              a.`Student ID`,
              a.`Class ID`,
              b.`Amount`,
              a.`Year

        FROM 
             `Student Class Table` a
        JOIN 
             `Designated Fees` b
        ON
                a.`Class ID`=b.`Class ID`
                    and                                         
                 a.Year=b.Year


    QUERY RESULTS

    |   Student ID  |   Class ID    |   Amount  |   Year    |
    |      0001     |      1        |     100   |   2013    |
    |      0002     |      1        |     100   |   2013    |
    |      0003     |      1        |     120   |   2014    |
    |      0001     |      2        |     210   |   2014    |

我希望根据注册的学生找到所有年份的总课程费用,使用当前年份作为基准年,在这种情况下,2014年是当前年份.

例如

    |   Class ID    |   Total Fees  |   Year    |   
    |       1       |       120     |   2014    |
    |       2       |       410     |   2014    |

Class ID = 1的班级的总费用是120,因为在2013年和2014年期间只有一名学生注册了该班级,2014年的分配费用是120,而且总费用是
Class ID = 2的班级是410,因为有两名学生在2013年入读班级ID = 1,他们预计会支付200,而在2014年2班,只有一名学生注册并且预计会支付210.

好吧,我对解决这个问题的想法很复杂,但是我在上面提到的问题中添加了一个小组,我知道这是错误的.我想要一个关于如何使用mysql或php解决这个问题的想法,我似乎无法找到解决方法.

最佳答案 如果您从该类注册时拥有该类的批次编号,则可以执行此操作.这样的班级学生将在完成学业之前承担批号.

例如,年级= 2013年班级ID = 1的班级学生将完成相同的批次.您可以选择创建另一个表并在学生班级表中引用它,具体取决于您多年来如何通过课程推广学生.

Student Class Table
|   Student ID  |   Class ID    |   Year    |  BatchNo    |
|      0001     |      1        |   2013    |     1       |
|      0002     |      1        |   2013    |     1       |
|      0003     |      1        |   2014    |     2       |
|      0001     |      2        |   2014    |     1       |

添加批次编号后,您可以简单地按批次分组并将金额相加:

  SELECT 
          a.`Student ID`,
          a.`Class ID`,
          sum(b.`Amount`),
          a.`Year

    FROM 
         `Student Class Table` a
    JOIN 
         `Designated Fees` b
    ON
            a.`Class ID`=b.`Class ID`
                and                                         
             a.Year=b.Year
  GROUP BY batchNo

这将是你的结果

|   Class ID    |   Total Fees  |   Year    |   
|       1       |       120     |   2014    |
|       2       |       410     |   2014    |

你可以通过这个想法,我认为,它可以很好地工作.

点赞