我必须就使用不同信用卡类型进行的交易数量制作临时报告.出于报告的目的,可以假设所有以4开头的信用卡都是VISA卡,而以5开头的信用卡是万事达卡.
此查询适用于上述区别:
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
Run Code Online (Sandbox Code Playgroud)
然而,在我们的情况下(不确定这是如何在世界范围内工作)所有以3开头的卡都可以被视为大莱卡,除了那些以37开头的AMEX卡.
像这样扩展上面的查询似乎是一个完整的黑客
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
Run Code Online (Sandbox Code Playgroud)
在所有情况下,除了前两位数与特殊情况匹配的情况外,是否有一种优雅的分组方式?
如果有人想帮忙,我也不知道如何标题这个问题...
编辑:我把MasterCard和VISA的值混为一谈,所以只是为了正确:)
你可以做如下的case语句:
select case
when substring(pan,1,2) = '37' then 'AMEX'
when substring(pan,1,1) = '3' then 'Diners'
when substring(pan,1,1) = '4' then 'Mastercard'
when substring(pan,1,1) = '5' then 'VISA'
else 'unknown'
end,
count(*),
sum(amount)
from transactions
group by card_type
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3628 次 |
| 最近记录: |