根据计算机和用户名查询活动和非活动连接

Wel*_*lsh 1 sql oracle plsql oracle10g

我正在尝试创建一个查询,列出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;
Run Code Online (Sandbox Code Playgroud)

这将列出每个用户每个计算机的总连接数的计数,但是在调整它以将活动,非活动和总连接计数作为一个一体化查询时很难.

所以结果应该是这样的:

ACTIVE   INACTIVE   TOTAL   MACHINE   USERNAME
Run Code Online (Sandbox Code Playgroud)

我可以让查询执行前三列之一,但不能同时执行所有三列.

任何帮助将不胜感激,因为我的SQL非常非常生疏.

Nic*_*nov 6

statusv$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;
Run Code Online (Sandbox Code Playgroud)