返回一行的子查询

pkbketx9  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(355)

我在mysql中有两个这样的表
第一桌:学生

id    Name       roll     
1     vivek      22222    
2     abc        33333

第二张table:费用

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
rryofs0p

rryofs0p1#

您可以通过以下操作获得所需的结果:

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'

您不需要在外部查询中求和,因为您将内部查询减少到每个查询只有一行 roll 你也只过滤一卷。
顺便说一下,只有在mysql中,这才是有效的查询:

select roll,amount,sum(amount) from fee group by roll

在标准sql中,不能只按一列进行分组 roll 但是输出2列(加上聚合)。正是由于这个原因,您最初得到的结果不正确,因为mysql(糟糕地)允许这种非标准的groupby语法。
只研究\u full \u group \u by

相关问题