对从SELECT语句返回的所有行求和

时间:2015-09-10 21:30:43

标签: mysql sum

SELECT SUM(SELECT type.value
FROM type,item_type 
WHERE item_type.type_id = type.id AND item_type.type_id IN (4,7)
GROUP BY type.id)

此查询有什么问题?我想总结来自内部查询的所有行。

3 个答案:

答案 0 :(得分:3)

您不能将SUM()函数与subquerys一起使用。根据手册,SUM()函数返回数字列的总和。你正在做的事情是这样的:SELECT 1 + 50 + 30 + 10。你在哪里选择价值表? sintax是:

SELECT SUM(column) FROM table 

看看: http://www.w3schools.com/sql/sql_func_sum.asp

正确的方法是

SELECT t.id, SUM(t.value)
FROM type as t,
INNER JOIN item_type as it
ON it.type_id = t.id
WHERE it.type_id IN (4,7)
GROUP BY t.id

考虑使用JOIN sintax而不是多个表:SQL left join vs multiple tables on FROM line?

答案 1 :(得分:1)

您应该学会使用正确的join语法和表别名:

SELECT SUM(t.value)
FROM type t JOIN
     item_type it
     ON it.type_id = t.id 
WHERE it.type_id IN (4,7);

如果您想为每个type.id添加一行,则需要GROUP BY

您的查询不起作用,因为子查询不允许作为聚合函数的参数。即使它们是,上下文将是标量子查询,并且您的子查询可能返回多行。

答案 2 :(得分:0)

在没有内部查询的情况下使用SUM

SELECT type.id, SUM(type.value)
FROM type,item_type 
WHERE item_type.type_id = type.id AND item_type.type_id IN (4,7)
GROUP BY type.id