打印表中给定列的重复值,次数与它们出现的次数一样多。 SQL

Posted

技术标签:

【中文标题】打印表中给定列的重复值,次数与它们出现的次数一样多。 SQL【英文标题】:Print repeating values from a given column in a table as many times as they occur. 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?请仅标记您正在运行的一个数据库。 我删除了不一致的数据库标签。仅使用您真正使用的数据库进行标记。 我正在寻找一个通用的解决方案。不限于特定的数据库。 【参考方案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

以上是关于打印表中给定列的重复值,次数与它们出现的次数一样多。 SQL的主要内容,如果未能解决你的问题,请参考以下文章

SQL如何查询出某一列中不同值出现的次数?

计算每个值在 PostgreSQL 表中出现的次数?

ccf数字排序

CCF201503-2数字排序

惯用地查找给定值在数组中出现的次数

如何计算某些值在 SQL 表中出现的次数并在列中返回该数字?