2016-04-06 7 views
2

タスク:クエリの簡素化オラクルのNorthwind

顧客の最大値が属する国を検索します。

クエリ

SELECT country, 
     count(*) 
FROM customers 
GROUP BY country 
HAVING count(*) = 
    (SELECT max(max_sal) 
    FROM 
    (SELECT count(*) max_sal 
     FROM customers 
     GROUP BY country)) ; 

結果

enter image description here

を結果は正しいですが、私はそれは、クエリ

質問書くための困難な方法であると思う:をこのクエリを簡単に書き直す方法はありますか?

+0

ウィンドウ関数を使用できますか? –

+0

@vkp私は決してユーザーのウィンドウ機能を使用しない –

答えて

2

私は何かが足りないかもしれないが、それはこのような単純なものすることができます)Uは(分析機能を超える使用することができます

SELECT * 
    FROM ( SELECT country, COUNT (*) max_sal 
      FROM customers 
     GROUP BY country 
     ORDER BY COUNT (*) DESC) 
WHERE ROWNUM <= 1; 
1

あなたはWITH句を使用することができます

WITH 
    c AS ( 
    SELECT country, Count(1) n 
    FROM customers 
    GROUP BY country) 
SELECT country, n 
FROM c 
WHERE n = (SELECT Max(n) FROM c) 
1

をウィッヒuのGET結果のすべての行でmax(平均、最小など)の結果、次に比較回数(1)と最大回数(1))

例:

SELECT country, cnt, max_cnt 
    FROM (SELECT country, COUNT(1) AS cnt, MAX(COUNT(1)) over() max_cnt 
      FROM customers 
      GROUP BY country) 
WHERE cnt = max_cnt 
1
SELECT Country, MAX(N) FROM (
    SELECT Country, COUNT(*) as N FROM CUSTOMERS GROUP BY Country 
);