次の2つのテーブルからデータを抽出したいと思います。添付の画像The data that I am afterを参照してください。私の目的は、1日あたりの積極的な選手から独立した預金者の数を得ることです。つまり、プレイヤーが入金されてもプレイしなかった場合でも、プレイヤーを数えたいと思うでしょう。2つのPostgreSQLテーブルのデータを1つにまとめる
私は次のコードを使用していますが、結果は私の後ではありません - 画像The data that I am gettingを参照してください。カントリーごとに行ごとにcalendar_date(2017-01-01)が1つしか得られません。両方の日付のデータが1つに合計されています&どの国にも属していない別のデータ行があります(預金者& Total_Deposit_Amount)。このデータは、各国間で配布する必要があります。
--temporary table for start_date
WITH Temp_Start_Date as
(
select CAST('2017-01-01' AS date)
),
--temporary table for end_date
Temp_End_Date as
(
select CAST('2017-01-03' AS Date)
),
--temporary table for calendar date
Temp_Calendar_Date as
(
SELECT 1 as LinkDate
,calendar_date::date from generate_series('2017-01-01',
CURRENT_DATE -212, '1 day'::interval) calendar_date
),
--temporary table for bet_transactions
Temp_bet_transactions AS
(
SELECT BT.account_id
, P.username
, CASE
WHEN P.country_code = '1' then '1'
WHEN P.country_code = '2' then '2'
WHEN P.country_code = '3' then '3'
WHEN P.country_code = '4' then '4'
WHEN P.country_code = '5' then '5'
WHEN P.country_code = '6' then '6'
ELSE '7'
END AS Country
, 1 AS LinkDate
, SUM(CAST(CAST(money_amount_cents AS DECIMAL (18,2))/100 AS DECIMAL (18,2))) AS Turnover
FROM accounts A
JOIN players P ON A.player_id = P.id
JOIN ONLY bet_transactions BT ON A.id = BT.account_id
WHERE BT.created_at >= (SELECT * FROM Temp_Start_Date)
AND BT.created_at < (SELECT * FROM Temp_End_Date)
AND BT.status = 'accepted'
AND amount_cents <> 0
GROUP BY
1, 2, 3
),
--temporary table for depositors
Temp_depositors AS
(
SELECT account_id
, 1 AS LinkDate
, SUM(CAST(CAST(money_amount_cents AS DECIMAL (18,2))/100 AS DECIMAL (18,2))) AS Total_Deposit_Amount
FROM deposit_transactions D
WHERE D.created_at >= (SELECT * FROM Temp_Start_Date)
AND D.created_at < (SELECT * FROM Temp_End_Date)
AND status = 'accepted'
GROUP BY
1, 2
)
--get result
SELECT TCD.calendar_date
, BT.country
, COUNT(DISTINCT BT.account_id) AS Active_Players
, COUNT(DISTINCT DT.account_id) AS Depositors
, SUM(DT.Total_Deposit_Amount) AS Total_Deposit_Amount
, SUM(BT.Money_Bet) AS Turnover
FROM Temp_Calendar_Date TCD
JOIN Temp_bet_transactions BT ON TCD.LinkDate = BT.LinkDate
FULL OUTER JOIN Temp_depositors DT ON BT.account_id = DT.account_id
GROUP BY
1,2
ご協力いただければ幸いです。
おかげ ステファン
カレンダーの日付でデータをグループ化するためのダミー列として、Linkdateが使用されています –