我正在计算每个班级和学生在他或她参加过的课程中所支付的总金额,具体取决于学年。
现在下面的Student Class Table
有两名学生,Student ID=0001
的学生已经在两个不同年份Class ID = 1, Year=2013
和Class ID=2, Year=2014
注册了两个班级。
然而,Student ID=0002
的学生只参加了一个班级,他离开了学校。另一名学生在课堂上报名参加
Class ID = 1
Year=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 |
Total Fees
课程的Class ID=1
为120
,因为2013年和2014年只有一名学生注册了该课程,2014年的分配费用为120,同样是Total Fees
Class ID=2
的课程为410
,因为2013年有两名学生在Class ID = 1
课程中注册,预计他们将支付200,而在2014年第2课,只有一名学生注册,预计将支付210。
好吧,我对解决这个问题的想法很复杂,但是我在上面提到的问题中添加了group by
,这是错误的。我想要一个关于如何使用mysql或php解决这个问题的想法,我似乎无法找到解决方法。
答案 0 :(得分:1)
如果您的班级已经注册,那么这将是可能的。这样的班级学生将在完成学业之前承担批号。
例如,在Class ID= 1
中Year=2013
的班级中的学生将完成相同的批次。您可以选择创建另一个表并在Student Class Table
中引用它,具体取决于您多年来如何通过课程推广学生。
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 |
添加批次编号后,您只需group by
批次编号并将金额加总:
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 |
你可以遵循这个想法,我认为它可以很好地运作。