繁体   English   中英

麻烦“过度划分”

[英]troubles on “over partition by”

我必须对使用以下类型的查询与数据库接口的现有代码(java)进行更改:

select distinct
  u.id_anauser,
  u.usestate,
  count(*) over (partition by u.usestate , id_anauser) cnt
from
  services u

因为不允许我进行单独的查询并通过工作Java端或翻转查询来关联结果(否则,我将切换到亲爱的旧“ group by”,即使使用,我也可以获得一些信息)肯定是更长更复杂的旅程),我添加了以下内容:

...
where (
u.usestate = 1
or
u.usestate = 3)

它起作用了,但是问题是这样,我得到了,当同一个“ id_ana”同时与“ usestate = 1”和“ usestate = 3”相关联时,双行与同一个“ id_ana”相关联,这是不允许的:我可以随意添加列。 所以我想做这样的事情:

    select distinct
      u.id_anauser,
      u.usestate,
      count(*) over (partition by u.usestate = 1 , id_anauser) cnt1,
      count(*) over (partition by u.usestate = 3 , id_anauser) cnt2
    from
      services u

但是我找不到正确的语法! (我是“ javer”,而不是“ SQLer” :-))

使用条件聚合:

select distinct
       u.id_anauser,
       u.usestate,
       sum(case when u.usestate = 1 then 1 else 0 end)  over (partition by id_anauser) as cnt1,
       sum(case when u.usestate = 3 then 1 else 0 end)  over (partition by id_anauser) as cnt3
from services u;

我不明白为什么您要在此查询中使用select distinct

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM