mysql-为什么这两个查询会返回不同的结果

时间:2014-05-20 05:13:54

标签: mysql

由于某种原因,我认为这两个mysql查询基本上是不同格式的相同的东西,它们会为sum值返回不同的结果,我不完全确定原因。

查询1(返回正确的值)

SELECT sum((getRankint(cs_times.mapid, 1123, 0, 0))) AS rankval
FROM cs_times
INNER JOIN cs_maps ON cs_times.mapid = cs_maps.mapid
WHERE stage =0
AND TYPE =0
AND active =1
AND playerid =1123
AND getRankint(
cs_times.mapid, 1123, 0, 0
) <11

查询2

SELECT @rankval := getRankint(cs_times.mapid, 1123, 0, 0) AS rankval, 
sum(@rankval)
FROM cs_times
INNER JOIN cs_maps ON cs_times.mapid = cs_maps.mapid
WHERE stage =0
AND TYPE =0
AND active =1
AND playerid =1123
AND getRankint(
cs_times.mapid, 1123, 0, 0
) < 11

如果我在没有sum函数的情况下并排比较表格,它们会完全相同。然而,总和值是不同的。知道是什么原因引起的吗?感谢。

(同样在查询的where部分有一个冗余函数调用,有没有办法清除它,所以它没有调用该函数两次?)

1 个答案:

答案 0 :(得分:0)

  

如果我在没有sum函数的情况下并排比较表格,它们会完全相同。然而,总和值是不同的。知道是什么导致了这个吗?

这是因为将聚合与行级列值组合在一起。

您的查询只会有一行结果。

  • 第一个值表示获取的第一行列值{/ 1}}的结果和
  • 第二个代表这些等级的总和= getRankint。 这里计数值是提取的满足的行数 条件。