如何使用SUM()将COUNT()相加?

时间:2018-12-12 16:37:44

标签: mysql sql

基本上,我有这个-

SELECT COUNT(student_dormpm.DormCode) * dorm_datapm.DormCharge
FROM student_dormpm
JOIN dorm_datapm
USING (DormCode)
GROUP BY DormCode;

结果

+---------------------------------------------------------+
| COUNT(student_dormpm.DormCode) * dorm_datapm.DormCharge |
+---------------------------------------------------------+
|                                                 5250.00 |
|                                                11250.00 |
|                                                 9600.00 |
|                                                 6500.00 |
|                                                 5510.00 |
+---------------------------------------------------------+

但是,每当我尝试添加SUM()时,它都会崩溃,并且会出现无效使用组函数的错误。

我已经尝试过SUM(COUNT(student_dormpm.DormCode) * dorm_datapm.DormCharge)

2 个答案:

答案 0 :(得分:1)

在整个第一个查询输出上使用sum,其中对第一个查询输出指定别名(例如模拟新表)为t,还指定别名为total到计数器,以便您可以计算sum(total)

select sum(total) as mysum from 
(
SELECT COUNT(student_dormpm.DormCode) * dorm_datapm.DormCharge as total
FROM student_dormpm
JOIN dorm_datapm
USING (DormCode)
GROUP BY DormCode
) t

答案 1 :(得分:0)

看起来dorm_datapm是您的宿舍表,每个DormCode都有一条记录,并带有关联的DormCharge。 (不过,在这种情况下,表名dorm更合适。)

如果是这样,那么您只想总结一下宿舍费用:

SELECT DormCode, SUM(dd.DormCharge)
FROM student_dormpm sd
JOIN dorm_datapm dd USING (DormCode)
GROUP BY DormCode
ORDER BY DormCode;

但是,如果dorm_datapm每个DormCode可以有多个记录,那么您将不得不查看上面的查询是否获得了想要的结果,或者是否想要加入{{1} }行,只有一个student_dormpm行(在这种情况下,您将不得不以某种方式扩展联接条件)。

如果您只想查找总数,则不要按dorm_datapm分组:

DormCode