微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你好!反正不使用工会写类似的查询?

如何解决你好!反正不使用工会写类似的查询?

那是在不使用工会的情况下写类似的查询吗?

select sum(decode(p.sumsend,1,0)) recvcnt,sum(decode(p.sumsend,0)*p.sumserv) recvsum
  from some_table p
 where p.polefilter = 5
 union
select sum(decode(p.sumsend,0)*p.sumserv) recvsum
  from some_table p
 where p.polefilter != 5

解决方法

如果可以将所有4列都放在一行上,那么一种选择是条件聚合:

select 
    sum(case when polefilter =  5 and sumsend = 0 then 1 else 0 end) recvcnt1,sum(case when polefilter =  5 and sumsend = 0 then 1 else 0 end *  sumserv) recvsum1,sum(case when polefilter <> 5 and sumsend = 0 then 1 else 0 end) recvcnt2,sum(case when polefilter <> 5 and sumsend = 0 then 1 else 0 end *  sumserv) recvsum2
from some_table p
where polefilter is not null

另一方面,如果要在结果集中有两行,则可以使用聚合和case表达式来定义组:

select 
    case when polefilter = 5 then 1 else 0 end as polefilter_is_5
    sum(case when sumsend = 0 then 1 else 0 end) recvcnt,sum(case when sumsend = 0 then 1 else 0 end *  sumserv) recvsum1
from some_table p
where p.polefilter is not null
group by case when polefilter = 5 then 1 else 0 end

请注意,我将decode()函数更改为case表达式;两者都做同样的事情,但是最新的是标准SQL(并且在某种程度上更灵活)。

,

类似以下查询的查询应该起作用。下次问问题时,请提供示例数据和预期输出。

  SELECT SUM (CASE WHEN p.sumsend = 0 THEN 1 ELSE 0 END)                 recvcnt,SUM (CASE WHEN p.sumsend = 0 THEN 1 ELSE 0 END * p.sumserv)     recvsum
    FROM some_table p
GROUP BY CASE p.polefilter WHEN 5 THEN 1 ELSE 0 END;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。