查询谁将仅输出字段 1 中超过特定阈值的数字



我必须在 ORACLE DB 上进行一个"简单"查询,该数据库将仅输出字段 1 中超过特定阈值的数字。

换句话说,假设我在数据库中有以下数据。

FIELD1               FIELD2
=========            ==============
3291234567           333991123456789
3277654321           333011123456789
3481234567           333101123456789
3291234567           333991123456789
3291234567           333011123456789
3277654321           333015123456789
3277654321           333103123456789
3277654321           333201123456789
3481234567           333112123456789

我只想输出 field1 中出现次数为>= 3 的数字,因此查询输出将为:

FIELD1        FIELD2
=========     ==============
3277654321    333011123456789
3277654321    333015123456789
3277654321    333103123456789
3277654321    333201123456789
3291234567    333991123456789
3291234567    333991123456789
3291234567    333011123456789

请帮忙!!!谢谢卢卡斯

这应该适合您(使用 COUNT(*) 作为窗口函数) - 我假设你想要 Oracle,即使问题被标记为 mysql

SELECT field1, field2 FROM (
    SELECT field1, field2, COUNT(*) OVER ( PARTITION BY field1 ) field1_cnt
      FROM mytable
) WHERE field1_cnt >= 3;
在MySQL

中完成此操作有点棘手,因为MySQL没有窗口函数。

SELECT * FROM db_table WHERE field1 IN 
( SELECT field1 FROM db_table GROUP BY field1 HAVING count(*) >= 3 )

我相信这将适用于Oracle和MySQL。 使用子查询列出具有三次出现的所有 field1 条目,然后运行原始查询以匹配该列表中的 field1 条目。

更新

参考您评论中的其他信息:

由于在这种情况下,子查询是一组用于标识的分组信息,FIELD1值满足yourtable中出现 3 次以上的条件,并且由于这些附加信息INNER JOIN -ed 到 yourtable ,如果您在最顶层的查询中添加带有WHERE子句的字段过滤,那就足够了。

因此,带有WHERE子句的查询应如下所示:

     SELECT  A.FIELD1,  A.FIELD2 
        FROM 
        yourtable A 
        INNER JOIN
        (
         SELECT FIELD1, COUNT (1) 
         FROM yourtable
         GROUP BY FIELD1
         HAVING COUNT (1) >= 3
       ) B
       ON A.FIELD1 = B.FIELD1
     WHERE 
       A.FIELD1 = 'some_value' 

同样,在您的最后一条评论中,如果您在yourtable中有更多字段需要过滤,您可以添加它们,例如:

     ..................
     WHERE 
       A.FIELD1 = 'some_value' 
       AND A.FIELD5 = 'some_field5_val'
       AND (...)

相关内容

  • 没有找到相关文章

最新更新