具有异常的mysql sum查询

时间:2016-01-17 10:09:20

标签: mysql group-by sum having

我有以下MySQL查询,对我来说效果非常好:

SELECT *, SUM(col1 + col2 + col3 + col4 + col5) AS sumtotal FROM table GROUP BY number HAVING sumtotal > 50;

但是,现在我需要通过添加某些异常使这个查询更复杂一些。基本上我需要排除col1 + col2大于50或col4 + col5大于50的行。我们的想法是找到所有行,其中这个总和在所有列中有些“平衡”,而不是向左或向右“倾斜”。像这样:

SELECT *, SUM(col1 + col2 + col3 + col4 + col5) AS sumtotal FROM table GROUP BY number HAVING sumtotal > 50 UNLESS SUM(col1 + col2) > 50 OR SUM(col4 + col5) > 50;

我可以通过做一些额外的PHP数学空手道来轻松实现我的最终结果,但这非常混乱,看起来像是额外的工作 - 所以我想尝试用MySQL编写更好的查询。

2 个答案:

答案 0 :(得分:0)

你非常接近。 UNLESS condition可以写为AND NOT condition,或只是AND并反转比较运算符:

SELECT 
  number,  -- * ? 
  SUM(col1 + col2 + col3 + col4 + col5) AS sumtotal 
FROM 
  table 
GROUP BY number 
HAVING 
  sumtotal > 50 
  AND SUM(col1 + col2) <= 50 
  AND SUM(col4 + col5) <= 50;

答案 1 :(得分:0)

将其添加到Where子句

select sum (col1 + col2 + col3 + col4 + col5 ) ab 
    from tab1 
    where col1 + col2 <50 and col4 + col5 < 50
    group by number 
    having sum (col1 + col2 + col3 + col4 + col5 ) > 50