2014-10-02 106 views
-1

我试图从结果2页不同的表,其中两个具有完全相同的架构和领域这样的组合:派生表使用GROUP BY

select * from 
(select query_type, count(query_type), campaign_id from table1 
UNION ALL 
select query_type, count(query_type), campaign_id from table2 
) derivedTable group by query_type,campaign_id; 

但是,我没有收到包含所有结果query_type和campaign_id。 有人可以告诉我失踪了吗?

+1

考虑提供样本数据集和适当的表定义,并在您的问题中添加您的预期结果集 – 2014-10-02 05:35:18

回答

1

聚合函数必须在同一个查询(或子查询),其中为GROUP BY,所以:

select query_type, count(query_type), campaign_id 
from (
    select query_type, campaign_id from table1 
    UNION ALL 
    select query_type, campaign_id from table2 
) derivedTable 
group by query_type,campaign_id; 

因为你的子查询使用聚合函数,但没有GROUP BY,该子查询只返回一行:

select query_type, count(query_type), campaign_id from table1 
1

试试这个

SELECT 
     query_type 
    , campaign_id 
    , COUNT(query_type) 
FROM (
      SELECT 
        query_type 
       , campaign_id 
      FROM table1 
      UNION ALL 
        SELECT 
         query_type 
         , campaign_id 
        FROM table2 
    ) derivedTable 
GROUP BY 
     query_type 
    , campaign_id 
; 

OR这样的:如果所述第二表是远程

SELECT 
     query_type 
     , campaign_id 
     , SUM(query_type) 
FROM (
      SELECT 
        query_type 
       , COUNT(query_type) 
       , campaign_id 
      FROM table1 
      GROUP BY 
        query_type 
       , campaign_id 
      UNION ALL 
        SELECT 
         query_type 
         , COUNT(query_type) 
         , campaign_id 
        FROM table2 
        GROUP BY 
         query_type 
         , campaign_id 
    ) derivedTable 
GROUP BY 
     query_type 
    , campaign_id 
; 

第二种形式可以是有用的,否则上述的第一个将被简单的。