将两个select语句组合成单个输出

时间:2018-04-18 13:51:24

标签: sql amazon-redshift

我正在尝试构建一个将两个SELECT语句连接到一个输出中的查询。

我正在使用Amazon Redshift。

我附上了我构建的查询,如下所示:

with q1 as (
    select count(invoices) as count,to_char(billtime,'yyyy-mm-dd'), store 
    from sales
    group by to_char(billtime,'yyyy-mm-dd'), store
),
q2 as (
    select count(a.invoices) as count1, b.store,
        to_char(a.billtime,'yyyy-mm-dd')
    from sales_detail a, dim_store b
    where a.store_id = b.id
    group by b.store, to_char(a.billtime,'yyyy-mm-dd')
)
select q1.count(invoices), q2.count(a.invoices), q1.store
from q1
left join q2
    on q1.store = q2.store
group by q1.store; 

我收到一条错误,指出无效的操作列不存在未命名的连接。

任何人都可以提供帮助。感谢..

2 个答案:

答案 0 :(得分:0)

您的选择语句似乎是个问题。由于您已经将两个CTE中的计数别名,您可以选择这些别名:

SELECT
    q1.store, q1.count, q2.count1
FROM q1
LEFT join q2
    ON q1.store = q2.store
GROUP BY q1.store;

就进一步改进而言,由于您最终希望从两个表中进行商店级聚合,因此无需按每个CTE中的结算日期进行汇总。因此,对于第一个CTE,您可以使用它:

WITH q1 AS (
    SELECT store, COUNT(invoices) AS count
    FROM sales
    GROUP BY store
)

但也许您从其他需要双重聚合的地方拉出了CTE。

答案 1 :(得分:0)

您可以使用UNION而不是CTE,并注意两个查询都具有相同的列名。之后转发了列和行。