2016-11-27 11 views
1

複数のテーブルから列を取得する場合は、列ごとにグループ化して頻度で並べ替える方法を教えてください。たとえば、Table_A、Table_B、Table_Cの3つのテーブルがあります。それぞれには同じデータの列があります。 Table_Cため 例えばTable_A複数のテーブルを使用してグループ化およびオーダーする方法

col 
------ 
aaa 
bbb 
aaa 
ccc 

例えばTable_B

aaa 
ccc 
ddd 
bbb 

と同様に、同様のデータ。現在、私はこの

select col, count(*) from Table_A UNION select col, count(*) from Table_B UNION select col, count(*) from Table_C group by col order by count(*) desc 

を持っている。しかし、これは私が望んでいた結果が得られていない

aaa 3 
bbb 2 
ccc 2 
ddd 1 

:私は、結果として以下のものを持っていると思います。ありがとう

答えて

0

まず、union allを使用してから集約してください。あなたはまた、データを事前に集約することができます

select col, count(*) as cnt 
from (select col from Table_A 
     union all 
     select col from Table_B 
     union all 
     select col from Table_C   
    ) abc 
group by col 
order by col; 

が、あなたは再び集約する必要があります:正しい構文は次のとおりです

select col, sum(cnt) as sum_cnt 
from (select col, count(*) as cnt from Table_A group by col 
     union all 
     select col, count(*) from Table_B group by col 
     union all 
     select col, count(*) from Table_C group by col 
    ) abc 
group by col 
order by col; 
+0

ゴードン、これは総括弧の混乱... –

+0

@DuduMarkovitzました。 。 。 * SQLとExcel *を使用したデータ分析の第1章で私のコードをどのようにインデントするかについて説明します。私がコードを書く方法を変えることによって私に何か好意を与えないでください。私は小さな変更に感謝しますが、インデントスタイルへの変更を再送信します。 –

+0

私はスタイルを変更しません。最初の変更はORDER BYのものでした。 2番目の変更は、括弧が不一致のためにコードが無効であったためです。私はまた、基本的に同じコード(しかし働いて...)私自身の答えを書いたが、私はあなたの鼻の下で正しい答えを盗もうとしていないので、分後に削除しました。 –

-1

各選択がで-句独自のグループを必要とします。

選択COL、UNIONはTable_C 群から、COLを選択カウント() Table_B 群からCOL によってUNIONがCOLを選択 、(*)カウント COL によってTable_A 群から ()をカウントcolによって 2 descによって順序;

+0

ダウン投票されました。誤ったロジックとセット演算子の誤用。 –

2
select  col 
      ,count(*) as cnt 

from  (  select col from Table_A 
      union all select col from Table_B 
      union all select col from Table_C 
      ) t 

group by col 

order by cnt desc 
      ,col 
; 

OR

select  col 
      ,sum(cnt) as sum_cnt 

from  (  select col,count(*) as cnt from Table_A group by col 
      union all select col,count(*)  from Table_B group by col 
      union all select col,count(*)  from Table_C group by col 
      ) 

group by col 

order by sum_cnt desc 
      ,col 
; 
関連する問題