我有以下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编写更好的查询。
答案 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