さまざまな種類のクレジット カードで行われた取引の数に関するアドホック レポートを作成する必要があります。レポートの目的上、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 で始まるすべてのカードは、AMEX カードである 37 で始まるカードを除いて、Diners Club カードと見なすことができます。
上記のクエリをこのように拡張すると、完全なハックのように見えます
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
最初の 2 桁が特殊なケースと一致する場合を除いて、すべてのケースで最初の桁でグループ化するエレガントな方法はありますか?
また、誰かが助けたい場合、この質問にタイトルを付ける方法もわかりません...
編集:MasterCardとVISAの値が混同されていたので、正しいように:)