簡體   English   中英

將來自同一個表的 2 個 SQL 查詢合並為單個輸出

[英]Combine 2 SQL queries from the same table to single output

我有一個表,'commercial_events',其中包含銷售('event_type = 'SALE'')和購買('event_type = 'PURCHASE')。 到目前為止,我正在使用兩個單獨的查詢來創建按小時細分的表格輸出。 我希望能夠運行一個查詢,並將所有數據合並到一個輸出中。

現在我正在運行這個查詢:

SELECT date_trunc('hour',event_tstamp) AS 'Hour', count(*) AS 'Purchases', sum(amount) AS 'Purchases Total'
FROM commercial_events
WHERE event_type = 'PURCHASE' AND state = 'COMPLETED'
GROUP BY 1
ORDER BY 1;

它返回的輸出如下所示:

         Hour           |   Purchases  |   Purchases Total
------------------------+--------------+--------------------
 2019-12-12 00:00:00+01 |          476 |  -533.582000000000
...

手動執行此過程時,我還運行以下查詢並手動組合 2 個輸出:

SELECT date_trunc('hour',event_tstamp) AS 'Hour', count(*) AS 'Sales', sum(amount) AS 'Sales Total'
FROM commercial_events
WHERE event_type = 'SALE' AND state = 'COMPLETED'
GROUP BY 1
ORDER BY 1;

但我希望將 2 個輸出組合在一起,如下所示:

          Hour          |   Sales   |   Sales Total   |   Purchases   |   Purchases Total
------------------------+-----------+-----------------+---------------+--------------------
 2019-12-12 00:00:00+01 |   1173    |       2330      |      476      |  -533.582000000000
 ...

如果您的版本是 9.4+,那么您可以使用FILTER子句:

SELECT 
  date_trunc('hour',event_tstamp) AS 'Hour', 
  COUNT(*) FILTER (WHERE event_type = 'PURCHASE') AS 'Purchases',
  SUM(Amount) FILTER (WHERE event_type = 'PURCHASE') AS 'Purchases_Total',
  COUNT(*) FILTER (WHERE event_type = 'SALE') AS 'Sales',
  SUM(Amount) FILTER (WHERE event_type = 'SALE') AS 'Sales_Total'
FROM commercial_events
WHERE event_type IN ('PURCHASE', 'SALE') AND state = 'COMPLETED'
GROUP BY date_trunc('hour',event_tstamp);

您可以使用條件SUM

SELECT 
  date_trunc('hour',event_tstamp) AS 'Hour', 
  SUM(
    CASE WHEN event_type = 'PURCHASE' AND state = 'COMPLETED' THEN 1 ELSE 0 END
  ) AS 'Purchases', 
  SUM(
    CASE WHEN event_type = 'PURCHASE' AND state = 'COMPLETED' THEN amount ELSE 0 END
  ) AS 'Purchases_Total', 
  SUM(
    CASE WHEN event_type = 'SALE' AND state = 'COMPLETED' THEN 1 ELSE 0 END
  ) AS 'Sales', 
  SUM(
    CASE WHEN event_type = 'SALE' AND state = 'COMPLETED' THEN amount ELSE 0 END
  ) AS 'Sales_Total'
FROM commercial_events
GROUP BY 1;

這將僅包括基於event_typestate行中的值的SUMCOUNT計算中的值。

使用條件聚合

SELECT date_trunc(ce."hour",event_tstamp) AS "Hour"
, count(case when event_type = 'SALE' then 1 end) AS "Sales"
, sum(case when event_type = 'SALE' then amount end) AS "Sales Total"
, count(case when event_type = 'PURCHASE' then 1 end) AS "Purchases"
, sum(case when event_type = 'PURCHASE' then amount end) AS "Purchases Total"
FROM commercial_events ce
WHERE event_type IN ('PURCHASE', 'SALE')
  AND state = 'COMPLETED'
GROUP BY date_trunc(ce."hour",event_tstamp)
ORDER BY 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM