【问题标题】:Count duplicate values that share same FK id计算共享相同 FK id 的重复值
【发布时间】:2019-05-29 11:55:52
【问题描述】:

我正在尝试计算一列中有多少重复项共享相同的 FK id。每个 Shared_FK_id 应该只有一种类型。

table:
Shared_FK_ID : bigint
type: varchar(50)

样本数据:

831 Ford
831 Fiat
831 Honda
831 Honda
831 Dodge
831 Volvo
831 Volvo
831 Opel

【问题讨论】:

  • 请解释一下所说的重复是什么意思。同时标记您正在使用的数据库。
  • 重复是指type 列中相同的值。
  • 在您的样本数据中,您的预期结果是什么?
  • 看起来有点明显但是SELECT count(1), type group by type
  • "每个 Shared_FK_id 应该只有一种类型。"您的意思是“每个 Shared_FK_id 应该只有一个每种类型的实例。”?

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

应该适用于大多数 sql DBMS

  select Shared_FK_ID, count(*) nmbr_of_dbls
    from (
       select Shared_FK_ID, type , count(*)
       group by Shared_FK_ID, type
       having count(*) > 1
    ) t
  group by Shared_FK_ID

【讨论】:

    【解决方案2】:

    要详细说明 Serg's answer,并使其特定于 SQL-Server,您可以根据您需要的输出执行以下任一操作。

    1) 包含重复的类型的数量:

    select Shared_FK_ID, count(*) nmbr_of_dbls
    from (
       select Shared_FK_ID, [type] , count(*) nmbr
       from data
       group by Shared_FK_ID, [type]
       having count(*) > 1
    ) t
    group by Shared_FK_ID
    

    2) 整个 FK ID 中的重复行总数:

    select Shared_FK_ID, sum(nmbr) nmbr_of_dbls
    from (
       select Shared_FK_ID, [type] , count(*) nmbr
       from data
       group by Shared_FK_ID, [type]
       having count(*) > 1
    ) t
    group by Shared_FK_ID
    

    现场演示:https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=c8e1ed9607430fde16157367d59afc90

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-21
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多