[英]Oracle SQL combine 2 queries from same table with output in 2 different columns
[英]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_type
和state
行中的值的SUM
和COUNT
計算中的值。
使用條件聚合
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.