按分组查询oracle

按分组查询oracle,oracle,Oracle,我有两个16位数的卡号 [123456789ABCDEF0], [123456ABCDEF7890] 在牌桌上。 我在bin表中有两个类似的bin[123456]和[123456789]。我需要一个查询来计算按bin分组的卡的数量如果您想为每张卡找到最长的匹配bin,您可以使用以下方法: select c.card_number, min(b.bin) keep (dense_rank first order by length(b.bin) desc) as bin from bins b

我有两个16位数的卡号 [123456789ABCDEF0], [123456ABCDEF7890] 在牌桌上。
我在bin表中有两个类似的bin[123456]和[123456789]。我需要一个查询来计算按bin分组的卡的数量

如果您想为每张卡找到最长的匹配bin,您可以使用以下方法:

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;
对于CTEs中的一些示例数据,第一个查询给出:

-- 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

我在表之间使用了一个左外联接,这样您就可以得到没有卡的箱子的零计数,但您可能不希望这样。

您如何知道这些卡号属于哪个箱子?这是我的问题,一个Bin是123456,另一个Bin是123456789。我想要一个查询,将123456789卡和123456卡组成一组。你想知道如何根据最长匹配数数吗?你不明白我在说什么。卡123456789ABCDEF0和卡123456ABDEF7890都有bin 123456,但123456789ABCDEF0也可能被计入bin 123456789。所以我的问题是:这两张牌属于哪个箱子?这张牌应该算在最长的箱子里