2016-12-27 14 views
0

私はトランザクションと最もよく使用されているクレジットカードを提供している声明の表を持っています。最も頻繁に発生する

CARDBRAND CARDUSED  MERCHNAME 
---------------------------------------- 
AMEX   182345   Gasstation 
VISA   70943   .... 
+1

これは、最も使用されるカードで、すべてのmerchnamesを配っているテーブル – DCR

答えて

1
SELECT CARDBRAND 
    ,count(*) as cardused 
    ,MERCHNAME 
FROM INFO c 
LEFT JOIN paytb t 
    on c.CONT_ID = t.CONT_ID 
GROUP BY CARDBRAND, 
     MERCHNAME 
ORDER BY count(*) desc; 

提案:AMEX、VISA ...

SELECT CARDBRAND, 
    count(*) as cardused 
from INFO c 
left join paytb t 
    on c.CONT_ID = t.CONT_ID 
GROUP BY CARDBRAND 
ORDER BY 2 desc; 

は、今私は、ほとんどの場合、クレジットカードでの取引で発見されたお店のMERCHNAMEの列を追加します:混乱を避けるために、列番号ではなくORDERBY句でColumnNameまたは関数を使用することを常に推奨します。

+0

のスキーマを示してください。私は最も訪問された店ですべてのカードブランドを持っていたいと思います。 – bastel

+0

@DCRは「テーブルのスキーマを表示してください」と言っています – chandler

+0

http://pastebin.com/FiL8b6Nf – bastel

0

まず、あなたの正しいクエリは次のようになります。

select c.cardbrand, count(t.cont_id) as cardused 
from info c left join 
    paytb t 
    on c.cont_id = t.cont_id 
group by c.cardbrand; 

そうでない場合は、あなたが使用されていないカードブランドの「0」を得ることはありません。加盟店情報について

、あなたはウィンドウ関数を使用することができます。

select cardbrand, total_cardused, merchant 
from (select c.cardbrand, t.merchant, count(t.cont_id) as cardused, 
      sum(count(t.cont_id)) over (partition by c.cardbrand) as total_cardused, 
      row_number() over (partition by c.cardbrand order by count(t.cont_id) desc) as seqnum 
     from info c left join 
      paytb t 
      on c.cont_id = t.cont_id 
     group by c.cardbrand, t.merchant 
    ) cm 
where seqnum = 1 
group by c.cardbrand; 
+0

SQLCODE = -206、エラー:C.CARDBRANDは有効ではありません 文脈は使用されています – bastel

関連する問題