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

根据使用mysql或php在特定年份注册的班级学生,查找课程费用总额,php,mysql,Php,Mysql,我计算的是每个班级以及他或她曾经就读过的班级的学生支付的总费用,具体取决于学年 现在下面的学生班级表有两名学生,学生ID=0001的学生在两个不同的年份注册了两个班级班级ID=1,年份=2013和班级ID=2,年份=2014 然而,学生ID=0002的学生只注册了一个班级,他离开了学校。另一个学生报名参加了这个班 类别ID=1在年份=2014 Student Class Table | Student ID | Class ID | Year |

我计算的是每个班级以及他或她曾经就读过的班级的学生支付的总费用,具体取决于学年

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

然而,学生ID=0002的学生只注册了一个班级,他离开了学校。另一个学生报名参加了这个班
类别ID=1
年份=2014

    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    |
班级ID=1的班级的
总费用
120
,因为在2013年和2014年只有一名学生在该班级注册,2014年分配的费用为120,而该班级的
总费用
class ID=2
的班级为
410
,因为2013年有两名学生注册在
class ID=1
的班级,他们预计支付200英镑,2014年只有一名学生注册,预计支付210英镑


嗯,我对解决这个问题的想法很复杂,但是我在前面提到的查询中添加了一个
groupby
,我知道这是错误的。我想知道如何使用mysql或php解决这个问题,但我似乎找不到解决方法。

如果您在注册该类时就有该类的批次号,这是可能的。这样一个班的学生在完成学业之前不承担任何费用

例如,在
Year=2013
class 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    |

你可以接受这个想法,我认为,它会很好地工作。

这看起来很有希望,请尝试并回复你,谢谢@George