【问题标题】:Displaying count of duplicates and removing duplicates at the same time?显示重复计数并同时删除重复?
【发布时间】:2017-07-27 21:19:58
【问题描述】:

抱歉,如果标题没有完全理解,我会尽力解释。

我有一个包含车辆信息的表格,其中有很多重复项,总共大约 5000 行。这里以 sn-p 为例:

您可以看到模型“159 TI TBI”重复了两次,这实质上意味着其中有两辆此类汽车存放在伦敦。

我正在寻找类似下面的内容,其中计算特定位置的特定车辆重复的次数,并删除重复项,以便每辆车在每个位置仅出现一次。

我可以针对特定车辆和位置执行相当简单的选择命令,例如

SELECT COUNT(model), model, loc_name, vehicle_type
FROM vehicles
WHERE loc_name='London' AND model='159 TI TBI'
GROUP BY model, loc_name, vehicle_type

问题是我会为特定位置的车辆模型的每个组合重复此命令,这不是很有效。

希望这是有道理的,我没有大量的 SQL 经验,所以如果有任何严重错误,我深表歉意。谢谢。

【问题讨论】:

  • 直接跳过 WHERE 子句。完成!
  • 您的问题是严格地与生成包含此信息的报告有关,还是您希望更改存储在表中的数据?如果只是为了报告,jarlh(在上面的评论中)和 TheName(在答案中)已经提供了解决方案。

标签: sql oracle count duplicates


【解决方案1】:

此查询将为您提供所需的结果

 SELECT COUNT(model) cnt, model, loc_name, vehicle_type
   FROM vehicles
  GROUP BY model, loc_name, vehicle_type

【讨论】:

  • 谢谢!没想到会这么简单!
【解决方案2】:

你的问题有点不清楚。但是让我试试。您似乎认为要获得每个组的计数,您必须在 where 子句中为每辆车重新查询。但是,聚合将允许您获得所有车辆的计数。如果您只是在寻找模型、位置、唯一类型和出现次数,那么您就有了正确的查询,只需删除 where 子句,SQL 的强大功能就会为您解决。

SELECT COUNT(*) as quantity, model, loc_name, vehicle_type 
FROM vehicles
GROUP BY model, loc_name, vehicle_type

【讨论】:

    【解决方案3】:

    如果您只想要出现多次的行,您可以使用过滤聚合结果

     SELECT COUNT(*) as quantity, model, loc_name, vehicle_type 
     FROM vehicles
     GROUP BY model, loc_name, vehicle_type
     having count(*) > 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多