2017-01-17 11 views
0

最大行数を持つConfig Typeを選択するためのクエリです。 データを選択する2番目のクエリと同じ速さの別の方法がありますか?高速SQLクエリの選択

select CONFIG_TYPE, MAX(COUNTING) FROM 
(select CONFIG_TYPE, COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG GROUP BY CONFIG_TYPE) 
WHERE COUNTING = 
(select MAX(COUNTING) FROM 
(select COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG GROUP BY CONFIG_TYPE) 
)GROUP BY CONFIG_TYPE 

この2番目のクエリは、これを行うための別の方法があった場合、それは2

select CONFIG_TYPE, COUNTING FROM 
(select CONFIG_TYPE, COUNT(*) as COUNTING FROM NOTIFICATION_CONFIG 
GROUP BY CONFIG_TYPE ORDER BY COUNTING DESC FETCH FIRST 1 ROW ONLY) 

に思っん、他とは違って、1件の検索で仕事を行います。

+0

私はIBM DB2を使用しています – Jackstine

答えて

1

使用ウィンドウ関数を台無しにされます!

SELECT c.* 
FROM (SELECT CONFIG_TYPE, COUNT(*) as COUNTING, 
      RANK() OVER (ORDER BY COUNT(*) DESC) as seqnum 
     FROM NOTIFICATION_CONFIG 
     GROUP BY CONFIG_TYPE 
    ) c 
WHERE seqnum = 1; 

これはRANK()を使用するので、(タイの場合)すべての最大値を返すであろう。結束の場合に任意の最大値を返す場合は、代わりにROW_NUMBER()を使用してください。または、結びつきが必要ない場合は、次の操作を実行できます。

SELECT CONFIG_TYPE, COUNT(*) as COUNTING 
FROM NOTIFICATION_CONFIG 
GROUP BY CONFIG_TYPE 
ORDER BY COUNT(*) DESC 
FETCH FIRST 1 ROW ONLY; 
0

これはちょうど

select CONFIG_TYPE, MAX(COUNTING) 
FROM (select CONFIG_TYPE, COUNT(*) as COUNTING 
     FROM NOTIFICATION_CONFIG 
     GROUP BY CONFIG_TYPE 
    ) 
WHERE COUNTING = (select MAX(COUNTING) 
        FROM (select COUNT(*) as COUNTING 
          FROM NOTIFICATION_CONFIG 
          GROUP BY CONFIG_TYPE 
         ) 
       ) 
GROUP BY CONFIG_TYPE