Как вычислить MODE для комбинации различных полей в SQL - PullRequest
1 голос
/ 01 июля 2019

У меня есть таблица ниже:

Broker      Currency    Ticker  Rate
Barclays    USD         Apple    0.10 
Barclays    USD         IBM      0.10 
Barclays    USD         Amazon   1.00 
Barclays    CAD         Col      0.50 
Barclays    CAD         Lyft     0.50 
Merrill     USD         Apple    0.20 
Merrill     USD         IBM      0.20 
Merrill     USD         Amazon   0.20 
Merrill     USD         Tesla    0.30 
Merrill     MXN         ticker1  5.30 
Merrill     MXN         ticker2  5.30 
Merrill     MXN         ticker3  2.60 

Мне нужно рассчитать режим для каждого поля валюты брокера. Выход:

Broker      Currency    Mode
Barclays    USD         0.1
Barclays    CAD         0.5
Merrill     USD         0.2
Merrill     MXN         5.3

Попробовал ниже:

select Count(*) as Frequency, rate as mode, date, name as Broker , ccy
FROM t
group by mode, date, Broker , ccy
order by Frequency

Я не уверен, как найти режим, как только я нашел частоту.

1 Ответ

1 голос
/ 01 июля 2019

Использовать оконные функции:

select t.*
from (select name, ccy, rate,
             count(*) as frequency,
             row_number() over (partition by broker, currency order by count(*) desc) as seqnum
      from t
      group by name, ccy, rate
     ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...