1

Oracle 10gデータベースのユーザー名ごとに、マシンごとのアクティブ、非アクティブ、および接続の総数を一覧表示するクエリを作成しようとしています。

私は次のクエリを持っています:

SELECT count(1) AS con_count, machine, username 
FROM v$session 
WHERE type <> 'BACKGROUND'
GROUP BY username, machine 
ORDER BY con_count DESC;

これにより、ユーザー名ごとのマシンごとの合計接続数のカウントが一覧表示されますが、アクティブ、非アクティブ、および合計接続のカウントをオールインワンクエリとして実行するように調整するのに問題があります。

したがって、結果は次のようになります。

ACTIVE   INACTIVE   TOTAL   MACHINE   USERNAME

そして、クエリに最初の3つの列の1つを実行させることはできますが、3つすべてを一度に実行することはできません。

私のSQLは非常に錆びているので、助けていただければ幸いです。

4

2 に答える 2

6

ビューの列statusにはv$session、アクティブなセッションと非アクティブなセッションに関する情報が含まれています。したがって、クエリを次のように再コーディングできます。

SELECT s.machine
     , s.username 
     , count(decode(s.STATUS, 'ACTIVE', 1))   as active_con
     , count(decode(s.STATUS, 'INACTIVE', 1)) as inactive_con
     , count(*)                               as total_con
FROM v$session s
WHERE type <> 'BACKGROUND'
GROUP BY username, machine 
ORDER BY total_con DESC;
于 2012-12-02T19:40:53.397 に答える
1

列タイプを使用してステータスを区別できると仮定すると、次のSUM式を使用できます。

 select sum(case when status = 'ACTIVE' then 1 else 0 end) as ACTIVE_COUNT
      , sum(case when status = 'INACTIVE' then 1 else 0 end) as INACTIVE_COUNT
      , count(*) as TOTAL_COUNT
      , username, machine
 from   v$session
 where type <> 'BACKGROUND'
 group by username, machine
 order by username, machine

列ステータスを使用する必要があるというNicholasの応答に基づいて更新されました。

于 2012-12-02T19:41:57.707 に答える