使用列中的MAX值来计算同一列中所有其他记录的正确语法是什么?
SELECT latitude,longitude,(variableData / MAX(variableData)) * 10 AS weightedData FROM heatMapData GROUP BY uniqueID;
根据我提供的示例,列variableData的MAX为每条记录返回自己,因为我对weightedData的结果为10。
对于记录,我在我的示例中提供的表heatMapData由4列组成:
答案 0 :(得分:1)
以下是一种利用JOIN
和user variable
保留最大值的方法,保证MAX()
只执行一次。
SELECT latitude,longitude,(variableData / @max_var_data) * 10 AS weightedData
FROM heatMapData CROSS JOIN
(SELECT @max_var_data := (SELECT MAX(variableData) FROM heatMapData)) params
GROUP BY uniqueID;
答案 1 :(得分:1)
不需要用户定义的变量(如所选答案中所示)。
作为替代方案:
SELECT h.latitude
, h.longitude
, h.variableData / m.max_vd * 10 AS weightedData
FROM heatMapData h
CROSS
JOIN ( SELECT MAX(d.variableData) AS max_vd
FROM heatMapData d
) m
GROUP BY h.uniqueID
注:
由于SELECT列表中未包含在GROUP BY中的非聚合表达式,MySQL之外的某些数据库会因语句而引发错误。 GROUP BY行为的MySQL特定扩展允许查询运行,但我们可以通过向sql_mode变量添加ONLY_FULL_GROUP_BY来使MySQL更符合标准(并抛出错误)。