Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从联接查询中选择总和字段和其他列_Mysql - Fatal编程技术网

Mysql 从联接查询中选择总和字段和其他列

Mysql 从联接查询中选择总和字段和其他列,mysql,Mysql,我有这些桌子 级别表levelsid,名称 学生表studentsid、名称、级别id 付款类型表付款类型SID,名称,例如学费、制服 付款表paymentsid,学生id,付款类型id,金额,创建时间 级别付款表付款级别id、付款类型id、金额,例如特定级别的免学费金额 我需要一个查询,该查询将获取指定levellevel_id中所有学生的总付款详细信息,并显示使用学生level_id查找付款_费用表获得的每个学生的付款费用 我有一个疑问: select students.id, studen

我有这些桌子

级别表levelsid,名称 学生表studentsid、名称、级别id 付款类型表付款类型SID,名称,例如学费、制服 付款表paymentsid,学生id,付款类型id,金额,创建时间 级别付款表付款级别id、付款类型id、金额,例如特定级别的免学费金额 我需要一个查询,该查询将获取指定levellevel_id中所有学生的总付款详细信息,并显示使用学生level_id查找付款_费用表获得的每个学生的付款费用

我有一个疑问:

select students.id, students.name name, levels.name class, MAX(payments.created_at) date, SUM(payments.amount) amount 
from `students` 
left join `payments` on `students`.`id` = `payments`.`student_id` and `payments`.`payment_type_id` = '1'
inner join `levels` on `levels`.`id` = `students`.`level_id`
group by `students`.`id`
这很好,在页面的按钮上检查现实生活中的查询,但我需要另外一个列合计,即学生级别和指定付款类型id的“付款金额”列中的“付款金额”,这样我就可以将合计与合计进行比较,并知道学生是否已完成付款

我已尝试过此操作,但正在处理此错误:

select students.id, students.name name, levels.name class, MAX(payments.created_at) date, SUM(payments.amount) amount, payment_fees.amount as total 
from `students` 
left join `payments` on `students`.`id` = `payments`.`student_id` and `payments`.`payment_type_id` = '1'
inner join `levels` on `levels`.`id` = `students`.`level_id`
inner join 'payment_fees' on 'payment_fees.level_id' = 'students.level_id'
但它不起作用。。。它给出了以下错误:


您可以使用子查询来分隔事物

select T3.student_name,T3.Level_name,T3.payment_name,T3.payment as student_payment,created_at,

    T4.payment_name as Level_payment,LevelPayment from 
    (
    select student_name,Level_name,payment_name,sum(amount) as payment,max(created_at) as created_at from
    (
    select S.name as student_name,S.id as student_id,
    L.name as Level_name,L.level_id from students S
    left join levels L
    on S.level_id=L.id
    )T1
    left join 
    (
    select PT.name as payment_name,id, student_id, payment_type_id, amount, created_at  
    from payments P
    left join payment_types PT
    on P.payment_type_id=PT.id
    ) T2
    on T1.student_id=T2.student_id
    group by student_name,Level_name,payment_name,T1.student_id
    ) T3
    left join
    (
    select PT.name as payment_name,L.name as Level_name,l.level_id, payment_type_id, sum(amount) as LevelPayment from payment_fees PF
    left join
    payment_types PT
    on PF.payment_type_id=PT.id
    left join levels L on PF.level_id=L.id
    group by PT.name,L.name,L.level_id,payment_type_id
    ) T4 on T3.Level_name=T4.Level_name

“这真是太不可思议了”!请参见使用正确的分组方式。查询甚至不会运行。您可以共享遇到的错误。感谢您的响应。。我已经编辑了这个问题,以显示工作查询的结果以及我在第二个查询中遇到的错误。@Eric尝试不堆积???,只堆积一个?够了。没有必要用问号来压倒OP。
select T3.student_name,T3.Level_name,T3.payment_name,T3.payment as student_payment,created_at,

    T4.payment_name as Level_payment,LevelPayment from 
    (
    select student_name,Level_name,payment_name,sum(amount) as payment,max(created_at) as created_at from
    (
    select S.name as student_name,S.id as student_id,
    L.name as Level_name,L.level_id from students S
    left join levels L
    on S.level_id=L.id
    )T1
    left join 
    (
    select PT.name as payment_name,id, student_id, payment_type_id, amount, created_at  
    from payments P
    left join payment_types PT
    on P.payment_type_id=PT.id
    ) T2
    on T1.student_id=T2.student_id
    group by student_name,Level_name,payment_name,T1.student_id
    ) T3
    left join
    (
    select PT.name as payment_name,L.name as Level_name,l.level_id, payment_type_id, sum(amount) as LevelPayment from payment_fees PF
    left join
    payment_types PT
    on PF.payment_type_id=PT.id
    left join levels L on PF.level_id=L.id
    group by PT.name,L.name,L.level_id,payment_type_id
    ) T4 on T3.Level_name=T4.Level_name