Ранжируйте строки по количеству и используйте его для окончательного результата.
- строки 1–11 представляют собой образцы данных (мне было лень вводить все)
- строки 12 - 17 представляют, что ранжирование Я говорил о
- строках # 18 и далее извлекается окончательный результат, отфильтровывая все, что не ранжировано как # 1
SQL> with burnabyfinal (dlocation, dpostal) as
2 (select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
3 select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
4 select '3935 Kincaid St Burnaby', 'V5G 2X6' from dual union all
5 select '1111 Dont want' , 'V5G 2X6' from dual union all
6 --
7 select '203 Sunset' , 'A4F 2CS' from dual union all
8 --
9 select '200 Hastings' , 'V92 S9V' from dual union all
10 select '300 Hastings 2nd' , 'V92 S9V' from dual
11 ),
12 temp as
13 (select count(dlocation) cnt, dlocation, dpostal,
14 dense_rank() over (partition by dpostal order by count(*) desc) rnk
15 from burnabyfinal
16 group by dlocation, dpostal
17 )
18 select cnt, dlocation, dpostal
19 from temp
20 where rnk = 1
21 order by cnt desc;
CNT DLOCATION DPOSTAL
---------- ----------------------- -------
3 3935 Kincaid St Burnaby V5G 2X6
1 300 Hastings 2nd V92 S9V
1 200 Hastings V92 S9V
1 203 Sunset A4F 2CS
SQL>