我有这个查询有这个输出(正确):
15
44
查询:
SELECT T.numContribuinte,
T.numero,
SUM(C.valor - T.valorTotalChamadas) AS saldo
FROM telemovel T
JOIN CARREGAMENTO C ON C.numero = T.numero
GROUP BY T.numContribuinte, T.numero
HAVING saldo > 0
ORDER BY T.numero DESC
如果我删除单词sum,则输出将为:
15
15
为什么缺少总和会在输出中产生这种差异?
答案 0 :(得分:2)
差异的原因是by design, MySQL allows columns in the SELECT to not be stated in the GROUP BY
or aggregate functions (MAX, MIN, COUNT, etc)。对此功能的警告是返回的值是任意的 - 它们不能保证每次都是一致的。
支持符合ANSI规定的内容,但很少(仅根据我的知识,SQLite)支持此行为。其他人要求列在GROUP BY
中提及或包含在聚合函数中。
答案 1 :(得分:0)
当您GROUP BY
某些列时,您要求MySQL在这些列中获取具有相同值的所有行,并将这些行替换为结果集中只有一行。 MySQL需要知道您希望每列中的哪一行在返回的一行中的每一列的值。您必须使用聚合函数来描述该函数,例如MIN
选择最小值,MAX
选择最大值,或SUM
选择要替换的所有值的总和。
如果您未能指定聚合函数,MySQL将从其想要的任何行中获取值。当您多次运行同一个查询时,从哪个行取值可能会有所不同 - 未定义行为。