fiId是Table1的主键。为什么此查询返回的行数与table1中的fiId一样多。在where子句中,fiId被限制为1行。添加Table1.fiId的组时,查询会正常执行,当然不应该这样做吗?感谢。
SELECT
Table1.fiId,
SUM(CASE Table2.type IN (4,7) THEN Table2.valueToSum ELSE 0 END),
FROM
Table1 INNER JOIN Table3 ON Table1.fiId = Table3.parentId
INNER JOIN Table2 ON Table2.leId = Table3.fiId
WHERE
Table1.fiId = 76813 AND
Table2.insId = 431144
答案 0 :(得分:2)
在SELECT
中使用汇总功能时,如SUM
和COUNT
选择其他列时,还需要包含这些附加列的GROUP BY
。虽然我不知道背后的确切原因,但将结果置于上下文中肯定会有所帮助。
考虑以下问题:
SELECT Name, Count(Product) as NumOrders
FROM CustomerOrders
GROUP BY Name
在这里,我们假设我们将得到如下结果:
Name NumOrders
------------------
Joe 15
Sally 5
Jim 23
现在,如果SQL不需要GROUP BY
,那么您对输出的期望是什么?我最好的猜测是这样的:
Name NumOrders
------------------
Joe 43
Sally 43
Jim 43
在这种情况下,虽然表格中实际上可能有43
个订单记录,但Name
并未真正提供任何有用的数据。相反,我们只是有一堆脱离背景的名字。
有关详情,请参阅此处的类似问题:Why do I need to explicitly specify all columns in a SQL "GROUP BY" clause - why not "GROUP BY *"?