从表中查找具有PK属性中最多值的值

时间:2012-02-15 19:39:38

标签: sql database oracle

我有一个包含以下值的表(请忽略index,此处列为R1..R10为表的PK。

1   R1  M1  Mo1
2   R2  M2  Mo3
3   R3  M4  Mo6
4   R4  M2  Mo1
5   R5  M7  Mo1
6   R6  M5  Mo2
7   R7  M6  Mo1
8   R8  M4  Mo4
9   R9  M9  Mo3
10  R10 M3  Mo9

我想找到一个值为Mo [i],其中R [i]的数量是最大值。例如,在上述情况下,Mo1具有最大数量的R [i]值,因此它必须返回Mo1。

我一直在使用count做这些东西,但还没有成功。

这是我写的

select Mo from table1 where Mo=(select max(r.Mo),max(count((r.Mo))) from table1 )r group by r.Mo

1 个答案:

答案 0 :(得分:0)

试试这个:

select Mo from
(
    select Mo from 
    (
        select Mo, count(*) cnt
        from table1
        group by Mo
    )
    order by cnt desc
) where rownum = 1;

首先按照Mo列对表进行分组,得到

Mo  | cnt
----+----
Mo3 | 2
Mo2 | 1
Mo4 | 1
Mo1 | 4
Mo6 | 1
Mo9 | 1

然后按计数对此进行排序,结果如下:

Mo 
---
Mo1
Mo3
Mo6
Mo2
Mo4
Mo9

然后它只返回结果的第一行,结果为Mo1