Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Oracle 答案很简单。如果我有超过1000万条记录,内存表将如何运行?它能容纳吗?@gwatene:这几乎是Caius Jard的第二个查询。我更喜欢他们的方法:1)使用UNION ALL而不是UNION;2)使用null来简化不同的计数。@Omari Victor_Oracle_Count_Distinct - Fatal编程技术网

Oracle 答案很简单。如果我有超过1000万条记录,内存表将如何运行?它能容纳吗?@gwatene:这几乎是Caius Jard的第二个查询。我更喜欢他们的方法:1)使用UNION ALL而不是UNION;2)使用null来简化不同的计数。@Omari Victor

Oracle 答案很简单。如果我有超过1000万条记录,内存表将如何运行?它能容纳吗?@gwatene:这几乎是Caius Jard的第二个查询。我更喜欢他们的方法:1)使用UNION ALL而不是UNION;2)使用null来简化不同的计数。@Omari Victor,oracle,count,distinct,Oracle,Count,Distinct,答案很简单。如果我有超过1000万条记录,内存表将如何运行?它能容纳吗?@gwatene:这几乎是Caius Jard的第二个查询。我更喜欢他们的方法:1)使用UNION ALL而不是UNION;2)使用null来简化不同的计数。@Omari Victor Omosa:对于ALL DESCRIPT结果,您需要一个UNION。您还需要不同的。那很贵,但事实就是这样。为什么不看看不同查询的解释计划,看看优化器是如何考虑成本的?UNION删除重复项,在本例中@Omari required distin


答案很简单。如果我有超过1000万条记录,内存表将如何运行?它能容纳吗?@gwatene:这几乎是Caius Jard的第二个查询。我更喜欢他们的方法:1)使用
UNION ALL
而不是
UNION
;2)使用null来简化不同的计数。@Omari Victor Omosa:对于
ALL DESCRIPT
结果,您需要一个
UNION
。您还需要
不同的
。那很贵,但事实就是这样。为什么不看看不同查询的解释计划,看看优化器是如何考虑成本的?
UNION
删除重复项,在本例中@Omari required distinct for col1,
UNION ALL
返回来自results@gwatene:否,您使用的是计数(不同)
,因此,
UNION
而不是
UNION-ALL
没有任何效果,除了DBMS需要做更多的工作。而且,
UNION
当然对整行都有效,所以您删除了一些重复项,保留了其他重复项。
ID_DATE     DESCRIPT1   DESCRIPT2
20191001    A           R
20191001    D           B
20191001    B           D
20191001    A           B
20191002    A           B
20191002    C           A
20191002    A           B
SELECT  
COUNT(distinct DESCRIPT1 || ' - ' ||  DESCRIPT2) AS ALL_DESCRIPT,
COUNT(DISTINCT DESCRIPT1) AS DESCRIPT_A, 
COUNT(DISTINCT DESCRIPT2) AS DESCRIPT_B, 
ID_DATE FROM MY_TABLE  GROUP BY ID_DATE;
ALL_DESCRIPT    DESCRIPT_A  DESCRIPT_B  ID_DATE
4               3           3           20191001
2               2           2           20191002
   INSERT all 
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','A','R')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','D','B')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','B','D')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191001','A','B')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','A','B')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','C','A')
   INTO SRC_DATA (ID_DATE, DESCRIPT1, DESCRIPT2) VALUES ('20191002','A','B')
   SELECT * FROM dual;
SQL> select id_date, count(distinct descript) cnt
  2  from (select id_date, descript1 descript from src_data
  3        union all
  4        select id_date, descript2 descript from src_data
  5       )
  6  group by id_date
  7  order by id_date;

ID_DATE         CNT
-------- ----------
20191001          4
20191002          3

SQL>
SQL> select id_date,
  2    count(distinct descript) cnt,
  3    count(distinct case when what = 'A' then descript end) descript_a,
  4    count(distinct case when what = 'B' then descript end) descript_b
  5  from (select 'A' what, id_date, descript1 descript from src_data
  6        union all
  7        select 'B' what, id_date, descript2 descript from src_data
  8       )
  9  group by id_date
 10  order by id_date;

ID_DATE         CNT DESCRIPT_A DESCRIPT_B
-------- ---------- ---------- ----------
20191001          4          3          3
20191002          3          2          2

SQL>
select 
  id_date, 
  count(distinct descript) all_descript,
  count(case when descript = 'A' then 1 end) as descript_a,
  count(case when descript = 'B' then 1 end) as descript_B
from 
(
  select id_date, descript1 descript
  from src_data
  union all
  select id_date, descript2 descript 
  from src_data
) x
group by id_date
order by id_date;
    select 
      id_date, 
      count(distinct descript) all_descript,
      count(distinct descript1) as descript_a,
      count(distinct descript2) as descript_B
    from 
    (
      select id_date, descript1 descript, descript1, descript2
      from src_data
      union all
      select id_date, descript2 descript, null, null
      from src_data
    ) x
    group by id_date
    order by id_date
select t1.all_descript, t2.descript_a, t2.descript_b, id_date
from -- this subquery gets you the overall distinct count
(
  select id_date, count(*) as all_descript
  from 
  (
    select id_date, descript1 from mytable
    union
    select id_date, descript2 from my_table
  )
  group by id_date
) t1
join -- this subquery gets you the separate distinct counts
(
  select
    id_date,
    count(distinct descript1) as descript_a,
    count(distinct descript2) as descript_b
  from my_table
  group by id_date
) t2 using (id_date)
order by id_date;
WITH b AS  (
              SELECT id_date,DESCRIPT1  col1,descript1,descript2 FROM 
              SRC_DATA
              UNION 
            SELECT id_date,DESCRIPT2  col1,descript1,descript2 FROM SRC_DATA
           )
SELECT id_date,count(DISTINCT col1) col1,count(DISTINCT descript1) 
    descript1,count(DISTINCT descript2) descript2 
FROM b
GROUP BY id_date