oraclesql显示每对(a,b)有多条记录的记录

dgsult0t  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(247)

我正在使用python访问一个oracleexadata数据库,这个数据库非常庞大。这张table的文件很差,我需要了解一些奇怪的情况。在r/python世界中,我运行了以下查询:

query = ("""
         SELECT COUNT(counter) as freq, counter
         FROM (
             SELECT COUNT(*) as counter
             FROM schema.table
             WHERE x = 1 AND y = 1
             GROUP BY a,b ) 
         GROUP BY counter""")

 with cx_Oralce.connct(dsn=tsn, encoding = "UTF-8") as con:
     df = pd.read_sql(con=con, query=sql)

这本质上是计算给定(a,b)对的观测频率。我之前说他们都是1(他们不是)。所以我想看看驱动这个的观察结果:

query = ("""
         SELECT *
         FROM schema.table
         WHERE x = 1 and y = 1
         AND (for each (a,b) there is more than one record)""")

我正在努力将其转换为正确的oraclesql。
在r( dplyr )这将是 group_by 以及 mutate (代替 summarise )在python中 pandas 这可以通过 transform .
我是sql新手,可能会使用不正确的术语。我很感激被纠正。

ndh0cuux

ndh0cuux1#

可以使用窗口函数:

SELECT ab.* 
FROM (SELECT t.*, COUNT(*) OVER (PARTITION BY a, b) as cnt
      FROM schema.table t
      WHERE x = 1 AND y = 1
     ) ab
WHERE cnt > 1;

相关问题