在一个查询中跨表组合聚合函数

时间:2019-06-25 22:28:05

标签: sql

我正在尝试使用SQL构建报告,该报告将返回同一查询中完全独立的表中的值。

我创建了三个查询,这些查询可为我提供所需的每个输出,但无法将它们合并到一个查询中以生成单个报告。

-从一个期间及其当前状态中选择新订阅的数量-

SELECT
    COUNT(
        CASE WHEN created >= '2019-05-01'
            AND created <= '2019-05-31' THEN
            1
        END) AS "number of new subscriptions",
    COUNT(
        CASE WHEN status = 'canceled'
            AND created >= '2019-05-01'
            AND created <= '2019-05-31' THEN
            1
        END) AS "count of canceled",
    COUNT(
        CASE WHEN status = 'active'
            AND created >= '2019-05-01'
            AND created <= '2019-05-31' THEN
            1
        END) AS "count of still active",
    COUNT(
        CASE WHEN status = 'trialing'
            AND created >= '2019-05-01'
            AND created <= '2019-05-31' THEN
            1
        END) AS "count of trialing",
    COUNT(
        CASE WHEN status = 'past_due'
            AND created >= '2019-05-01'
            AND created <= '2019-05-31' THEN
            1
        END) AS "count of past due"
FROM
    subscriptions;

-退款总数-

SELECT
        COUNT(
            CASE WHEN received_at >= '2019-05-01'
                AND received_at <= '2019-05-31'
                AND refunded = TRUE THEN
                1
            END) AS "number of refunds"
FROM
    charges;

-退款总额-

SELECT
    ROUND((SUM(amount_refunded) / 100), 2) AS "Total Amount Refunded"
FROM
    charges
WHERE
    received_at >= '2019-05-01'
    AND received_at <= '2019-05-31'
    AND refunded = TRUE;

我希望输出是合并到一个输出中的所有单个查询的结果。

1 个答案:

答案 0 :(得分:0)

在您的情况下,您可以交叉连接由SELECT组成的派生表。

SELECT *
       FROM (SELECT <rest of your first query here>) a
            CROSS JOIN (SELECT <rest of your second query here>) b
            CROSS JOIN (SELECT <rest of your third query here>) c;