Выбор значений в столбцах на основе других столбцов - PullRequest
0 голосов
/ 12 ноября 2019

У меня есть две таблицы, информация и транзакции. информация выглядит так:

customer ID Postcode 1 ABC 123 2 DEF 456

, а транзакции выглядят так:

customer ID day frequency 1 1/1/12 3 1 3/5/12 4 2 4/6/12 2 3 9/9/12 1

Я хочу знать, какой день имеет самый высокийчастота для каждого почтового индекса.

Я знаю, как ссылаться из двух разных таблиц, но я не слишком уверен, как ссылаться на несколько столбцов, основанных на их значениях, на другие столбцы.

Вывод должен быть примерно такимэто:

customer ID postcode day frequency 1 ABC 123 3/5/12 4 2 DEF 456 4/6/12 2 3 GHI 789 9/9/12 1

и т. д.

1 Ответ

0 голосов
/ 12 ноября 2019

Вы можете фильтровать с помощью коррелированного подзапроса:

select
    i.*,
    t.day,
    t.frequency
from info i
inner join transactions t on t.customerID = i.customerID
where t.frequency = (
    select max(t.frequency)
    from info i1
    inner join transactions t1 on t1.customerID = i1.customerID
    where i1.postcode = i.postcode
)

Или, если ваша RBDMS поддерживает оконные функции, вы можете использовать rank():

select *
from (
    select
        i.*,
        t.day,
        t.frequency,
        rank() over(partition by i.postcode order by t.frequency desc)
    from info i
    inner join transactions t on t.customerID = i.customerID
) t
where rn = 1
...