2016-12-27 77 views
0

我有一個表中有交易和發表最常用的信用卡的聲明。 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是最經常在一個事務中找到具有的信用卡添加一列:

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

請出示表 – 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; 

建議:總是建議在ORDERBY子句中使用ColumnName或函數,而不是列號,以避免混淆。

+0

這給予了最常用的卡上的所有merchnames的架構。我想擁有最受歡迎的商店的所有品牌。 – 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