简体   繁体   English

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

[英]Combining aggregate functions across tables in one query

I am trying to build a report using SQL that will return values from completely separate tables in the same query.我正在尝试使用 SQL 构建一个报告,该报告将从同一查询中完全独立的表中返回值。

I've created three queries that give me each output that I desire, but not able to get these merged into one query to generate a single report.我创建了三个查询,它们为我提供了我想要的每个输出,但无法将它们合并到一个查询中以生成单个报告。

-- Selects count of new subscriptions from a period and their current status -- -- 从一个时期选择新订阅的数量及其当前状态 --

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;

-- Total Number of Refunds -- -- 退款总数 --

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;

-- Total Amount Refunded -- -- 退款总额 --

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;

I would expect the output to be the results of all individual queries merged into one output.我希望输出是所有单个查询的结果合并为一个输出。

In your case you can cross join derived tables made up from your SELECT s.在您的情况下,您可以交叉连接由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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM