【问题标题】:Oracle SQL show records WHERE there are more than one record for each pair of (a,b)Oracle SQL 显示记录 WHERE 每对 (a,b) 有多个记录
【发布时间】:2020-06-10 11:40:38
【问题描述】:

我正在使用 Python 访问一个巨大的 Oracle Exadata 数据库。该表的文档相当差,我需要了解奇怪的情况。来自 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)""")

我正在努力将其转换为正确的 Oracle SQL。

在 R (dplyr) 中,这将是 group_bymutate(而不是 summarise)的组合,在 Python 中 pandas 可以使用 transform 完成。

我是 SQL 新手,可能会使用不正确的术语。我很感激被纠正。

【问题讨论】:

    标签: python sql oracle


    【解决方案1】:

    你可以使用窗口函数:

    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;
    

    【讨论】:

    • 我得到一个错误:"T": invalid identifier,它必须是FROM schema.table t吗?
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2020-07-07
    • 2023-03-20
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多