【问题标题】:Way to show records that are not unique in PLSQL在 PLSQL 中显示非唯一记录的方法
【发布时间】:2021-02-03 15:30:06
【问题描述】:

我在movies 表中有imdb_id。记录总数为 10856。但下面的查询显示有 10846 个唯一 ID。

select count(imdb_id) from movies;

我怎样才能只显示那些不是唯一的? 我想我需要count = 0; 但是好的逻辑是什么?

这是我的桌子movies

CREATE TABLE "AS6400U"."MOVIES" 
(   "ID" NUMBER(38,0), 
    "IMDB_ID" VARCHAR2(26 BYTE), 
    "POPULARITY" NUMBER(38,6), 
    "BUDGET" NUMBER(38,0), 
    "REVENUE" NUMBER(38,0), 
    "ORIGINAL_TITLE" VARCHAR2(500 BYTE), 
    "CAST" VARCHAR2(500 BYTE), 
    "HOMEPAGE" VARCHAR2(300 BYTE), 
    "DIRECTOR" VARCHAR2(600 BYTE), 
    "TAGLINE" VARCHAR2(400 BYTE), 
    "KEYWORDS" VARCHAR2(500 BYTE), 
    "OVERVIEW" VARCHAR2(2000 BYTE), 
    "RUNTIME" NUMBER(38,0), 
    "GENRES" VARCHAR2(400 BYTE), 
    "PRODUCTION_COMPANIES" VARCHAR2(500 BYTE), 
    "RELEASE_DATE" DATE, 
    "VOTE_COUNT" NUMBER(38,0), 
    "VOTE_AVERAGE" NUMBER(38,1), 
    "RELEASE_YEAR" NUMBER(38,0), 
    "BUDGET_ADJ" NUMBER(38,3), 
    "REVENUE_ADJ" NUMBER(38,5)
   );

亲切的问候, 安娜

【问题讨论】:

标签: sql oracle duplicates filtering


【解决方案1】:

实际上select count(imdb_id) from movies; 告诉您有十条记录,其中 IMDB_ID 为空。 count() 只计算非空值。要找出其中有多少是您需要运行的重复项:

select count(distinct imdb_id) from movies;

【讨论】:

    【解决方案2】:

    这些是重复的:

    select imdb_id
    from movies
    group by imdb_id
    having count(*) > 1;
    

    要查看有关它们的所有数据,请将其用作内联视图:

    select *
    from movies
    where imdb_id in (select imdb_id
                      from movies
                      group by imdb_id
                      having count(*) > 1
                     );
    

    【讨论】:

    • 重复问题的重复答案。请解释为什么这个问题不是重复的。请解释为什么您的答案与重复问题中的答案不同。
    【解决方案3】:

    你也可以使用分析函数,像这样:

    create table emp as select * from  hr.employees;
    insert into emp select * from hr.employees where department_id = 10;
    
    select * from (
            select  emp.*, count(*) over(partition by employee_id order  by hire_date) cnt from emp )
    where cnt = 2 ;
    

    对于您的数据,它可能如下所示:

    select * from (
            select  m.*, count(*) over(partition by imdb_id order  by id) cnt from  movies m)
    where cnt = 2 ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多