MYSQL总和案例值等于该组的最大值

时间:2016-10-06 12:10:19

标签: mysql

我正在尝试解决此查询以返回组中的itens总数,该组中的itens总数,其值等于该组中一个字段的最大值这是最大值(值)。

到目前为止:

{{1}}

到目前为止,mysql返回“无效使用组功能。”

仅在mysql中解决它是否太复杂?最好使用算法吗?

谢谢,

1 个答案:

答案 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不支持常见的表表达式,这对这两种解决方案都有帮助。