Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算列表中每个元素的并发数_Sql_Oracle_Count - Fatal编程技术网

Sql 计算列表中每个元素的并发数

Sql 计算列表中每个元素的并发数,sql,oracle,count,Sql,Oracle,Count,我有一个条目列表,我需要知道它们是否在表的列中。这很简单,但我不知道如何标记此列表的条目何时不出现在DB列中。 如果可能的话,知道每个元素在Db列中的结果计数。当列表中的某个元素未出现在DB列中时,输出必须为0 当我说列表时,它是: select xxxxxx from TABLE WHERE field in (a, b, c, d, ... , z); 为了做到这一点,你首先需要知道你要计算的价值清单是什么。您必须以某种方式自己生成这些信息,并将它们存储在某个描述的子查询中,或者使用这些信

我有一个条目列表,我需要知道它们是否在表的列中。这很简单,但我不知道如何标记此列表的条目何时不出现在DB列中。 如果可能的话,知道每个元素在Db列中的结果计数。当列表中的某个元素未出现在DB列中时,输出必须为0

当我说列表时,它是:

select xxxxxx from TABLE WHERE field in (a, b, c, d, ... , z);

为了做到这一点,你首先需要知道你要计算的价值清单是什么。您必须以某种方式自己生成这些信息,并将它们存储在某个描述的子查询中,或者使用这些信息创建一个表或视图

然后,您可以加入主表并计算出数字

以下表为例:

create table tmp_test ( numbers number, letters varchar2(1));
,其数据填充如下:

 insert into tmp_test
 select mod(level, 500), chr(mod(level,13) + 97) 
   from dual
connect by level <= 1000
select all_vals, count(b.letters)
  from ( select 'a' as all_vals from dual
          union all
         select 'l' from dual
          union all
         select 'm' from dual
          union all
         select 'p' from dual
                ) a
  left outer join tmp_test b
    on a.all_vals = b.letters
 group by a.all_vals
 order by all_vals
       ;

A COUNT(B.LETTERS)
- ----------------
a               76
l               77
m               77
p                0
如前所述,子查询可以很容易地替换为视图或表

左外连接是这里的区别所在。生成了要计算的值列表,然后检查它们是否存在于感兴趣的列中


下面是一个使用这些示例的示例。为了做到这一点,您首先需要知道要计算的值列表是什么。您必须以某种方式自己生成这些信息,并将它们存储在某个描述的子查询中,或者使用这些信息创建一个表或视图

然后,您可以加入主表并计算出数字

以下表为例:

create table tmp_test ( numbers number, letters varchar2(1));
,其数据填充如下:

 insert into tmp_test
 select mod(level, 500), chr(mod(level,13) + 97) 
   from dual
connect by level <= 1000
select all_vals, count(b.letters)
  from ( select 'a' as all_vals from dual
          union all
         select 'l' from dual
          union all
         select 'm' from dual
          union all
         select 'p' from dual
                ) a
  left outer join tmp_test b
    on a.all_vals = b.letters
 group by a.all_vals
 order by all_vals
       ;

A COUNT(B.LETTERS)
- ----------------
a               76
l               77
m               77
p                0
如前所述,子查询可以很容易地替换为视图或表

左外连接是这里的区别所在。生成了要计算的值列表,然后检查它们是否存在于感兴趣的列中

下面是使用这些示例的示例。使用(全局)临时表或嵌套表对象

  • 临时表()

  • 表对象()

使用(全局)临时表或嵌套表对象

  • 临时表()

  • 表对象()


:使用
选择NVL(列名称,0)
用例或解码
语句,以防列不在null@GauravSoni-数据行不存在与值为
NULL
之间存在根本区别。在OPs案例中,
NVL
将无助于解决这样一个事实,即OP想要输出的
0
没有对应的数据行。@Dems:您的权利,我无法正确回答问题。感谢您的解释。如果您有一些示例数据和结果,这将更加清晰。:使用
选择NVL(列名称,0)
用例或解码
语句,以防列不在null@GauravSoni-数据行不存在与值为
NULL
之间存在根本区别。在OPs案例中,
NVL
将无助于解决这样一个事实,即OP想要输出的
0
没有对应的数据行。@Dems:是的,我无法正确回答问题。感谢您的解释。如果您有一些示例数据和结果,这将更加清晰。谢谢您的回答,非常有帮助。最后一个问题。是否需要删除临时表,或者当我断开与数据库的连接时,临时表将消失?否,Oracle中的临时表是全局的:结构是跨会话共享的(所有会话都可以使用它,但它们只能看到自己的数据)。除非计划只运行此代码一次,否则不应删除临时表。创建一次,下次需要时再使用。它们就像持久化中的视图(不可能每次需要时都创建/删除视图)。临时表中的数据将在会话或事务结束时自动删除(在创建时决定)。感谢您的回答,非常有用。最后一个问题。是否需要删除临时表,或者当我断开与数据库的连接时,临时表将消失?否,Oracle中的临时表是全局的:结构是跨会话共享的(所有会话都可以使用它,但它们只能看到自己的数据)。除非计划只运行此代码一次,否则不应删除临时表。创建一次,下次需要时再使用。它们就像持久化中的视图(不可能每次需要时都创建/删除视图)。临时表中的数据将在会话或事务结束时自动删除(在创建时决定)。感谢您的回答。我不懂SQL语句的一部分。在“选择mod(级别500),chr(mod(级别13)+97)”中,按级别从双连接中选择,这只是一种简单的方法。你自己试试吧!谢谢你的回答。我不懂SQL语句的一部分。在“选择mod(级别500),chr(mod(级别13)+97)”中,按级别从双连接中选择,这只是一种简单的方法。你自己试试吧!