【问题标题】:Print repeating values from a given column in a table as many times as they occur. SQL打印表中给定列的重复值,次数与它们出现的次数一样多。 SQL
【发布时间】:2020-07-27 20:41:14
【问题描述】:

好的,所以我们知道我们可以使用 Group By 以及 Having 关键字和像 Count() 这样的聚合函数来检查列是否有重复值。

如果我想做的是打印那些重复的值,不是一次,而是与它们在表中出现的次数一样多?

所以如果一列包含:1,2,2,2,3,4,5,5,6,7,8,8,8. 我希望我的查询返回:2,2,2,5,5,8,8,8.

Group by/distinct 只会显示 2、5、8。我怎样才能得到我想要的?

谢谢。

【问题讨论】:

  • MySQL 还是 Oracle?请仅标记您正在运行的一个数据库。
  • 我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。
  • 我正在寻找一个通用的解决方案。不限于特定的数据库。

标签: sql count where-clause window-functions


【解决方案1】:

您可以在子查询中计算窗口计数,然后使用它来过滤结果集:

select val
from (select val, count(*) over(partition by val) cnt from mytable) t
where cnt > 1

【讨论】:

  • 如何找到只出现一次的那些,然后从表中减去它们。只会留下重复的值。
  • 上述查询只为您提供多次出现的值,这就是我理解您的问题的方式。从表中减去是什么意思?
  • 你理解得很好。有一个 MINUS 关键字,Q1 MINUS Q2 表示生成的查询将包含 Q2 中的所有元素,除了 Q1 中的元素。
  • @MuhammadFaraz:没必要。只需我们上面的查询。另一方面,如果您希望值只出现一次,则将where 子句更改为where cnt = 1
猜你喜欢
  • 2019-03-30
  • 1970-01-01
  • 2021-10-27
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
相关资源
最近更新 更多