我正在使用Redshift數據庫,但我無法理解爲什麼我的連接或SUM帶來了太多的值。我的查詢是下面:SQL加入或SUM在使用Redshift數據庫時返回的值太多
SELECT
date(u.created_at) AS date,
count(distinct c.user_id) AS active_users,
sum(distinct insights.spend) AS fbcosts,
count(c.transaction_amount) AS share_shake_costs,
round(((sum(distinct insights.spend) + count(c.transaction_amount))/
count(distinct c.user_id)),2) AS cac
FROM
dbname.users AS u
LEFT JOIN
dbname.card_transaction AS c ON c.user_id = u.id
LEFT JOIN
facebookads.insights ON date(insights.date_start) = date(u.created_at)
LEFT JOIN
dbname.card_transaction AS c2 ON date(c2.timestamp) = date(u.created_at)
WHERE
c2.vendor_transaction_description ilike '%share%'
OR c2.vendor_transaction_description ilike '%shake to win%'
GROUP BY
date
ORDER BY
1 DESC;
此查詢將返回以下數據:
如果我們看一下2017年2月8日,我們可以看到一共有1298對「share_shake_costs」。但是,如果我只在card_transaction表上運行相同的查詢,則會得到以下正確的結果。
這第二個表的查詢看起來是這樣的:
SELECT
date(timestamp),
sum(transaction_amount)
FROM
dbname.card_transaction AS c2
WHERE
c2.vendor_transaction_description ilike '%share%'
OR c2.vendor_transaction_description ilike '%shake to win%'
GROUP BY
1
ORDER BY
1 DESC;
我有一種感覺,我有一個類似的問題,我的「fbcosts」一欄。我認爲它必須處理我的連接,因爲SUM應該工作正常。
我是Redshift和SQL的新手,所以也許有更好的方法來完成整個查詢。有什麼明顯的我失蹤了?
刪除表中的連接,直到找出哪個連接導致重複計數。 (可能有幾個) –
這兩個查詢運行不同的聚合,因此可能不是很好的比較。請解釋模式或表關係(哪些是一對多?)。爲什麼在'users'上''LEFT JOIN dbname.card_transaction'兩次? – Parfait
這些連接條件看起來很奇怪。似乎你說的交易的日期/時間必須等於用戶記錄的創建日期。奇。 – trincot