Запрос на оракула по группе - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть два 16-значных номера карты [123456789ABCDEF0], [123456ABCDEF7890] в карточном столе.У меня есть два одинаковых bin [123456] и [123456789] в таблице bin.Я хочу, чтобы запрос подсчитал количество карт, сгруппированных по bin

1 Ответ

0 голосов
/ 26 февраля 2019

Если вы хотите найти самую длинную соответствующую ячейку для каждой карты, вы можете использовать что-то вроде этого:

select c.card_number,
  min(b.bin) keep (dense_rank first order by length(b.bin) desc) as bin
from bins b
left join cards c
on c.card_number like b.bin || '%'
group by c.card_number;

, а затем объединить эти результаты:

select bin, count(card_number)
from (
  select c.card_number,
    min(b.bin) keep (dense_rank first order by length(b.bin) desc) as bin
  from bins b
  left join cards c
  on c.card_number like b.bin || '%'
  group by c.card_number
)
group by bin;

С некоторым примеромданные в CTE, первый запрос дает:

-- CTEs for sample data
with cards (card_number) as (
            select '123456789ABCDEF0' from dual
  union all select '123456789ABCDEF1' from dual
  union all select '123456ABCDEF7890' from dual
  union all select '123456ABCDEF7891' from dual
  union all select '123456ABCDEF7892' from dual
),
bins (bin) as (
            select '123456' from dual
  union all select '123456789' from dual
  union all select '2345' from dual
)
-- actual query
select c.card_number,
  min(b.bin) keep (dense_rank first order by length(b.bin) desc) as bin
from bins b
left join cards c
on c.card_number like b.bin || '%'
group by c.card_number;

CARD_NUMBER      BIN      
---------------- ---------
123456789ABCDEF0 123456789
123456789ABCDEF1 123456789
123456ABCDEF7890 123456   
123456ABCDEF7891 123456   
123456ABCDEF7892 123456   
                 2345     

, а второй дает:

BIN       COUNT(CARD_NUMBER)
--------- ------------------
123456789                  2
2345                       0
123456                     3

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

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