Нахождение значения из таблицы, которые имеют наибольшее количество значений из атрибута PK - PullRequest
1 голос
/ 15 февраля 2012

У меня есть таблица со следующими значениями (Пожалуйста, игнорируйте индекс, здесь столбец с 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.

Я делал вещи, используя счет, но пока не удалось.

Вот что я написал

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

1 Ответ

0 голосов
/ 15 февраля 2012

Попробуйте это:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...