0

私はこのサイトの他の投稿のいくつかを調べましたが、私が探しているものが正確にわからないので、ここに行きます。

私は2つのテーブルを持っているとしましょう

juser
-----------------------------
userID   firstName   lastName
-----------------------------
1         billy        bob
2         jezze       belle
3         bobbie       sue

と:

juserrel
--------------------------------------------- 
id       userID      relUserID        state
--------------------------------------------- 
1         1            2            approved
2         2            1            retired
3         2            1            approved
4         3            2            approved

私がやろうとしているのは、juserテーブルの各ユーザーに関する各ユーザー情報を表示する結果セットを取得し、特定のユーザーが別のユーザーに対して持つ「アクティブな」接続の数を示す接続と呼ばれる列を結果セットに追加することです。

上記の表に基づいて私が期待する結果は次のとおりです。

resultSet
-----------------------------------------------
userID    firstName    lastName    connections
-----------------------------------------------
  1         billy        bob           2
  2         jezze        belle         3
  3         bobbie       sue           1

私が試したクエリは次のとおりです

select userID, firstName, lastName , coalesce(x.cnt,0) as connections 
from juser
left outer join (select count(*) cnt from juserrel where juserrel.userID =
userID or juserrel.relatedUserID = userID and juserrel.state = 'approved') 
x on userID = userID

私が得る結果セットは次のようになります:

resultSet
-----------------------------------------------
userID    firstName    lastName    connections
-----------------------------------------------
  1         billy        bob           4
  2         jezze        belle         4
  3         bobbie       sue           4

助けてください ;)

4

1 に答える 1

3

試す:

select u.userID, u.firstName, u.lastName,
    count(case when ur.state = 'approved' then 1 end)
from juser u
inner join juserrel ur on u.userID = ur.userID or u.userID = ur.relUserID
group by u.userID, u.firstName, u.lastName

SQLフィドルの例

于 2012-09-20T19:50:31.467 に答える