Вы можете использовать приведенное ниже, чтобы получить требование
with data as (select 'A' Col1, 3 Col2 , 'S' Col3, '#' Col4 from dual UNION all
select 'A' , 3 , 'S', '#' from dual UNION all
select 'A' , 3 , 'X', '#' from dual UNION all
select 'A' , 3 , 'X', '#' from dual UNION all
select 'A' , 3 , 'X', '@' from dual UNION all
select 'A' , 3 , 'X', '@' from dual UNION all
select 'A' , 5 , 'X', '@' from dual UNION all
select 'A' , 5 , 'X', '@' from dual UNION all
select 'A' , 5 , 'S', '#' from dual UNION all
select 'A' , 5 , 'S', '#' from dual),
data1 as (
select
Col1,
count(Col2) over (partition by col1,col2 order by col2) cnt_col2,
Col2,
count(Col3) over (partition by col1,col3 order by col3) cnt_col3,
Col3,
count(Col4) over (partition by col1,col4 order by col4) cnt_col4,
Col4
from data
),data2 as
(
select col1,col2,col3,col4,max(cnt_col2)||max(cnt_col3)||max(cnt_col4) Max_cnt
from data1
group by Col1, Col2 , Col3, Col4)
select Col1, Col2 , Col3, Col4 from data2
where (max_cnt,col1) in (select max(max_cnt),
col1 from data2 group by col1);
Получив помощь от ответа a_horse_with_no_name, вы можете попытаться решить, поможет ли приведенное ниже решение вашей проблемы с производительностью
SELECT DISTINCT d.*
FROM data d
WHERE ( col1, col2 ) IN (SELECT col1,
Stats_mode(col2) col2
FROM data
GROUP BY col1)
AND ( col1, col2, col3 ) IN (SELECT col1,
col2,
Stats_mode(col3) col3
FROM data
GROUP BY col1,
col2)
AND ( col1, col2, col3, col4 ) IN (SELECT col1,
col2,
col3,
Stats_mode(col4) col4
FROM data
GROUP BY col1,
col2,
col3)