簡體   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