我有一个SQL查询,如下所示:
select aaa,
count(condition_1),
count(condition_2),
count(condition_3)
from DB
where ...
group by 1,
order by 1
以上将返回四列。是否可以使用having语句来抑制结果中的某些字段,但返回原始脚本将生成的所有行。
提前感谢您的帮助
答案 0 :(得分:1)
如果你试图“抑制”字段值(并且我假设你真的希望在这种情况下返回0,因为只要它们在选择中,字段就不会消失)基于某些条件但返回所有行,您可以尝试以下方法:
select aaa,
case when count(condition_1) > 1 then count(condition_1) else 0 end as count_1,
case when count(condition_2) > 1 then count(condition_2) else 0 end as count_2,
case when count(condition_3) > 1 then count(condition_3) else 0 end as count_3
from DB
where ...
group by 1,
order by 1
显然修改case语句以反映你想要返回的值,其他所有值都为0
答案 1 :(得分:0)
我不确定你的意思但是,根据我的理解,你试图根据单个列的数量对结果进行分组。如果这是正确的,那么您需要的代码就是
select aaa,
count(condition_1) as count_1,
count(condition_2) as count_2,
count(condition_3) as count_3
from DB
where ...
group by 1,
order by 1
having count_1 > 1
答案 2 :(得分:0)
不,你不能压制列(字段)并保留所有行。
任何过滤(WHERE,HAVING等)都只适用于行。
你可以这样做
select
aaa,
case
when somecondition then count(condition_1)
when somecondition then count(condition_2)
end as thecount,
case
when somecondition then '1'
when somecondition then '2'
end as thecountofwhat
from mytable
where ...
group by aaa,
order by aaa
注意:不要在GROUP BY或ORDER BY中使用序数。不好的做法。只有MySQL允许GROUP BY中存在这样的废话。