sql >> データベース >  >> RDS >> Oracle

SQLグループ関数のネストが深すぎます

    これを行う1つの方法は、クエリをネストしてから、出力の最初の行を選択することです。

    select C_SE_ID, cnt
    from (select CS.C_SE_ID, count(*) as cnt
          from COURSE_SECTION CS join
               ENROLLMENT E
               on CS.C_SE_ID=E.C_SE_ID join
               LOCATION L
               on CS.LOC_ID=L.LOC_ID
          where L.BLDG_CODE='DBW'
          GROUP BY CS.C_SE_ID
          order by count(*) desc
         ) t
    where rownum = 1
    

    onを使用して、結合構文をより新しいバージョンに更新したことに注意してください。 whereの代わりに 。

    すべてが必要な場合 最小値(および複数あります)の場合、分析関数を使用します。これは、元のクエリと非常によく似たアイデアです:

    select *
    from (select CS.C_SE_ID, count(*) as cnt,
                 max(count(*)) over (partition by cs.c_se_id) as maxcnt
          from COURSE_SECTION CS join
               ENROLLMENT E
               on CS.C_SE_ID=E.C_SE_ID join
               LOCATION L
               on CS.LOC_ID=L.LOC_ID
          where L.BLDG_CODE='DBW'
          GROUP BY CS.C_SE_ID
          order by count(*) desc
         ) t
    where cnt = maxcnt;
    

    元のクエリの代わりにこれを試してください:

    SELECT E.S_ID
    FROM ENROLLMENT E
    where E.C_SE_ID in (select C_SE_ID
                        from (select CS.C_SE_ID, count(*) as cnt,
                                     max(count(*)) over (partition by cs.c_se_id) as maxcnt
                              from ENROLLMENT E
                                   LOCATION L
                                   on CS.LOC_ID=L.LOC_ID
                              where L.BLDG_CODE='DBW'
                              GROUP BY e.C_SE_ID
                             ) t
                        where cnt = maxcnt)
                       );
    

    結合を修正することに加えて、course_sectionへのすべての参照も削除しました 。このテーブルは(結果のフィルタリングを除いて)使用されていないようで、削除するとクエリが簡素化されます。




    1. Adobe CQ5を使用した外部データベース?

    2. Java-Eclipse:パッケージoracle.jdbc.driverが存在しません

    3. dockercomposeMySQLコンテナ[2002]接続が拒否されました

    4. php mysqlを使用してテーブルからデータにアクセスする方法は?