我正在尝试解决此查询以返回组中的itens总数,该组中的itens总数,其值等于该组中一个字段的最大值这是最大值(值)。
到目前为止:
{{1}}
到目前为止,mysql返回“无效使用组功能。”
仅在mysql中解决它是否太复杂?最好使用算法吗?
谢谢,
答案 0 :(得分:1)
在聚合完成之前,您尝试在聚合函数(SUM
)中使用每个组的最大值,因此它不可用。下面的查询使用加入子查询的策略,该子查询包含每个cotavertical
组的最大值limid
。在这种情况下,您想要使用的每个组的最大值现在可以从其他来源获得,您可以使用它进行求和。
SELECT l.limid,
COUNT(*),
SUM(CASE WHEN cotavertical = t.cotamax THEN 1 ELSE 0 END),
MAX(cotavertical)
FROM limites l
LEFT JOIN tbparentchild pc
ON pc.parent = l.limid
LEFT JOIN tbspatialbi s
ON pc.child = s.rgi
LEFT JOIN
(
SELECT limid, MAX(cotavertical) AS cotamax
FROM limites
LEFT JOIN tbparentchild
ON parent = limid
LEFT JOIN tbspatialbi
ON child = rgi
WHERE limtipo = 4 AND x = 1
GROUP BY limid
) t
ON l.limid = t.limid
WHERE limtipo = 4 AND l.x = 1
GROUP BY l.limid
解决问题的另一个选择是直接在CASE
语句中使用子查询。但是,考虑到原始查询中的联接的大小和数量,这将比上面的查询更加方式。 MySQL不支持常见的表表达式,这对这两种解决方案都有帮助。