Вложенный SQL выбирает?DISTINCT от одного столбца, и получить соответствующий режим для каждого значения в другом? - PullRequest
0 голосов
/ 12 октября 2018

Допустим, у меня есть таблица с именем Key_Values, которая выглядит как

--keys--|--values--
  A     |    1     
  A     |    1     
  A     |    2     
  B     |    1     
  B     |    1     
  C     |    3   
  C     |    3     
  C     |    4

Мне нужно написать один оператор выбора, который бы получал все различные ключи и режим их соответствующих значений.Это вернуло бы это

--keys--|--values--
  A     |    1     
  B     |    1     
  C     |    3   

У меня возникли проблемы с поиском правильного способа сделать это.Я знаю, что могу сделать DISTINCT (ключи), но я не уверен, как получить значения из этого.

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете использовать оконные функции, если ваша база данных поддерживает это:

select key, value as mode
from (select key, value, count(*) as cnt,
             row_number() over (partition by key order by count(*) desc) as seqnum
      from keyvalue
      group by key, value
     ) kv
where seqnum = 1;

В MS Access это гораздо более болезненно:

select key, value, count(*) as cnt
from keyvalue kv
group by key, value
having kv.value = (select top (1) kv2.value
                   from keyvalue kv2
                   where kv2.key = kv.key
                   group by kv2.value
                   order by count(*) desc
                  );
...