删除查询结果

时间:2011-07-11 13:33:50

标签: sql

我有一个SQL查询,如下所示:

select aaa,
 count(condition_1),
 count(condition_2),
 count(condition_3)
from DB
where ...
group by 1,
order by 1

以上将返回四列。是否可以使用having语句来抑制结果中的某些字段,但返回原始脚本将生成的所有行。

提前感谢您的帮助

3 个答案:

答案 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中存在这样的废话。