我在MySQL中有2个这样的表
第一张桌子:学生
id Name roll
1 vivek 22222
2 abc 33333
第二张表:费用
id amount roll
1 3540 22222
2 28140 22222
我正在尝试运行
SELECT roll_no,sum(amount) as deposit
FROM stu_profile
join (select roll,amount,sum(amount) from fee group by roll) as fee on roll=roll_no
WHERE 1 and roll='62032'
我想要这个输出。
roll deposit
22222 31680
但是我得到了这个
roll deposit
22222 3540
答案 0 :(得分:1)
您可以通过以下方式获得所需的结果:
SELECT
roll
, SUM(amount) summed_amt
FROM fee
WHERE roll = '22222'
GROUP BY roll
;
但是如果您确实需要同时涉及两个表,请尝试以下操作:
SELECT
roll_no
, summed_amt
FROM stu_profile p
JOIN (
SELECT
roll
, SUM(amount) summed_amt
FROM fee
GROUP BY roll
) AS fee
ON p.roll_no = fee.roll
WHERE p.roll_no = '22222'
外部查询中不需要SUM,因为您可以将内部查询减少为每个roll
仅一行,并且也只过滤一卷。
顺便说一句,只有在MySQL中,这才是有效的查询:
select roll,amount,sum(amount) from fee group by roll
在标准SQL中,您不能仅按一列roll
进行分组,而是输出2列(加上聚合)。正是由于这个原因,您最初得到的结果是错误的,因为MySQL(严重)允许使用这种非标准的语法分组。