子查询返回一行

时间:2018-10-07 20:05:16

标签: join mysqli

我在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

1 个答案:

答案 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(严重)允许使用这种非标准的语法分组。

研究only_full_group_by