Вложенный SQL выбирает? DISTINCT от одного столбца, и получить соответствующий режим для каждого значения в другом?
Скажем, у меня есть таблица с именем 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 ответ
Вы можете использовать оконные функции, если ваша база данных поддерживает это:
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
);