我必须制作一份关于使用不同信用卡类型进行的交易数量的临时报告。出于报告的目的,可以假设所有以 4 开头的信用卡都是 VISA 卡,而以 5 开头的信用卡是 MasterCard。
此查询适用于上述区别:
select card_type =
case substring(pan,1,1)
when '4' then 'VISA'
when '5' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
然而,在我们的情况下(不确定这在全球范围内如何运作),所有以 3 开头的卡都可以被视为大来卡,除了那些以 37 开头的 AMEX 卡。
像这样扩展上述查询似乎是一个完整的 hack
select card_type =
case substring(pan,1,2)
when '30' then 'Diners'
...
when '37' then 'AMEX'
...
when '39' then 'Diners'
when '40' then 'VISA'
...
when '49' then 'VISA'
when '50' then 'MasterCard'
...
when '59' then 'MasterCard'
else 'unknown'
end,count(*),
sum(amount)
from transactions
group by card_type
除了前两位数字与特殊情况匹配外,是否有一种优雅的方式在所有情况下都按第一位数字进行分组?
如果有人想帮忙,我也不知道如何命名这个问题......
编辑:我把 MasterCard 和 VISA 的值弄混了,所以要正确:)