如何从表中获取组合的最大出现值?

时间:2014-04-02 13:09:42

标签: sql

我有下表;

column 1  column 2   column 3
1         2          X
1         2          X
1         2          Y

1         3          Z
1         3          X

我需要编写一个SQL查询来获取输出;

1         2         X (because X is the maximum occurrence)
1         3         Z or X(because number of occurrence of Z or X is same)

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我想我有一个解决方案,请使用RANK(),ROW_NUMBER()&功能尝试此脚本。 DENSE_RANK(),您选择符合您需求的功能:

with temp as (
select 1 as col1, 2 AS col2, 'X' as col3 union all
select 1 as col1, 2 AS col2, 'Y' as col3 union all
select 1 as col1, 2 AS col2, 'X' as col3 union all
select 1 as col1, 3 AS col2, 'Z' as col3 union all
select 1 as col1, 3 AS col2, 'T' as col3 union all
select 1 as col1, 3 AS col2, 'Y' as col3 union all
select 1 as col1, 3 AS col2, 'Y' as col3 union all
select 1 as col1, 4 AS col2, 'Y' as col3 union all
select 1 as col1, 4 AS col2, 'W' as col3)
,temp2 AS (
select
     col1
    ,col2
    ,col3
    ,COUNT(1) nb_occurence
    ,RANK() OVER(PARTITION BY col1,col2 ORDER BY COUNT(1) DESC) Ordre_RANK
    ,ROW_NUMBER() OVER(PARTITION BY col1,col2 ORDER BY COUNT(1) DESC) Ordre_ROW_NUMBER
    ,DENSE_RANK() OVER(PARTITION BY col1,col2 ORDER BY COUNT(1) DESC) Ordre_DENSE_RANK
from temp
GROUP BY
     col1
    ,col2
    ,col3 )

SELECT *
FROM temp2
--WHERE Ordre_RANK = 1
--WHERE Ordre_ROW_NUMBER = 1
--WHERE Ordre_DENSE_RANK = 1

我希望这会对你有所帮助。