2016-11-27 54 views
1

如果我从多个表中获取列,如何按列和按频率排序?例如,我有3个表格,Table_A,Table_B,Table_C。他们每个人都有一列相同的数据。 e.g表-A如何使用多个表进行分组和排序

col 
------ 
aaa 
bbb 
aaa 
ccc 

e.g表-B

aaa 
ccc 
ddd 
bbb 

,同样也Table_C类似数据。我想有以下的结果:

aaa 3 
bbb 2 
ccc 2 
ddd 1 

目前,我有这个

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 

但是,这并没有给我我想要的结果。谢谢

回答

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的。第二个变化是因为由于括号不匹配导致代码无效,当所有的括号实际上是多余的。我也写了我自己的答案,它基本上是相同的代码(但工作......),但一分钟后我删除了它,因为我不想在你的鼻子下偷一个正确的答案。 –

-1

每一个选择的子句需要自己组。

选择栏,计数()从表-A 组 由COL UNION 选择栏,计数()从表-B 组 由COL UNION 选择栏,从Table_C 组COUNT(*) by col order by 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 
; 
相关问题