Sql 查询活动&;基于非计算机和用户名的非活动连接

Sql 查询活动&;基于非计算机和用户名的非活动连接,sql,oracle,plsql,oracle10g,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; 我可以让查询执行前三列中的一列,但不能同时执行所有三列 任何帮助都将不胜感激,因为

我试图进行一个查询,列出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;
我可以让查询执行前三列中的一列,但不能同时执行所有三列


任何帮助都将不胜感激,因为我的SQL非常非常生锈。

v$session的
status
列包含有关活动和非活动会话的信息。因此,您可以按如下方式重新编码查询:

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;
选择s.machine
,s.username
,计数(解码(状态为“活动”,1))为活动
,计数(解码(s.状态为“不活动”,1))为不活动
,计算(*)为总成本
从v$s开始
其中键入“背景”
按用户名、计算机分组
按总说明订购;

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;
选择s.machine
,s.username
,计数(解码(状态为“活动”,1))为活动
,计数(解码(s.状态为“不活动”,1))为不活动
,计算(*)为总成本
从v$s开始
其中键入“背景”
按用户名、计算机分组
按总说明订购;

假设可以使用列type来区分您的状态,您可以使用
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
选择sum(状态为'ACTIVE'时的情况,然后选择1或0 end)作为ACTIVE\u计数
,总和(状态为'INACTIVE'时为1,否则为0结束)作为非活动计数
,计数(*)为总计数
,用户名,计算机
从v$session开始
其中键入“背景”
按用户名、计算机分组
按用户名、机器订购

根据Nicholas的回复更新,应使用列status

假设可以使用列类型来区分您的状态,您可以使用
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
选择sum(状态为'ACTIVE'时的情况,然后选择1或0 end)作为ACTIVE\u计数
,总和(状态为'INACTIVE'时为1,否则为0结束)作为非活动计数
,计数(*)为总计数
,用户名,计算机
从v$session开始
其中键入“背景”
按用户名、计算机分组
按用户名、机器订购

根据Nicholas的回复进行更新,即应使用列status

什么列和什么值定义活动和非活动?什么列和什么值定义活动和非活动?感谢您的回答。这对我帮助很大:)谢谢你的回答。这对我帮助很大:)