将两个选择语句组合成单个输出

Posted

技术标签:

【中文标题】将两个选择语句组合成单个输出【英文标题】:Combining two select statement into single output 【发布时间】:2018-04-18 13:51:24 【问题描述】:

我正在尝试构建一个查询,将两个 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; 

我收到一条错误消息,提示无效操作列不存在未命名连接。

谁能帮忙。谢谢..

【问题讨论】:

【参考方案1】:

您的选择语句似乎是问题所在。由于您已经为两个 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。

【讨论】:

感谢您的帮助,得到了预期的结果。【参考方案2】:

您可以使用 UNION 代替 CTE,并注意两个查询具有相同的列名。之后转置列和行。

【讨论】:

以上是关于将两个选择语句组合成单个输出的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 使用 LIMIT 有效地将两个 select 语句组合成一个结果

如何将两个HTML表的输出组合成单个列和一些列

通过从两个不同的数组中随机选择键和值将两个数组组合成一个数组

如何将两个每个 8 位的数组(二进制数字字符串组合成一个 16 位的单个字符串?(arduino,移位寄存器)

我想将 t-sql 中的 json 行组合成单个 json 行

如何将形状drawable和drawable组合成单个drawable