期望:
使用以下模式(按順序)撰寫一個檢索 user_ids 的 SQL 查詢:
a) 進行一筆或多筆法定存款,總額至少為 2000 歐元。首次存款是在入職后 4 天內。這些是用戶的第一筆存款,之前沒有加密存款。
b) 在一筆交易中將大部分資金(≥ 90%)兌換成 ETH 或 BTC
c) 在首次存款后 4 天內提取至少 2000 歐元的 ETH 或 BTC。此加密提款是用戶的第一次提款。
用戶資訊查看
user_info.csv
| 列名 | 解釋 | |||
|---|---|---|---|---|
| 用戶身份 | 用戶的唯一識別符號 | |||
| 年齡 | 用戶的年齡(以年為單位) | |||
| 國家代碼 | 用戶所在國家 | |||
| was_referred | 布林值,指示用戶是否在 | |||
| onboarding_completed_at | 用戶完成入職的時間戳 | |||
| t2_upgrade_at | 用戶升級到第 2 層時的時間戳。這 | |||
| 需要帶照片的身份證件 地址驗證,以及 | ||||
| 允許用戶存入高達 50K 歐元和 | ||||
| 提取 100 萬歐元 | ||||
| t3_upgrade_at | 用戶升級到第 3 層時的時間戳。這 | |||
| 需要資金來源驗證,以及 | ||||
| 取消存款或取款限制 | ||||
| become_premium_at | 用戶成為高級用戶的時間戳 | |||
| premium_tier 用戶當前的高級等級 | ||||
| is_fraud 布林值,指示用戶已被 | ||||
| 合規團隊標記為可疑 |
Transaction_info 視圖
transaction_info.csv
| 列名 | 解釋 | |||
|---|---|---|---|---|
| 用戶身份 | 用戶的唯一識別符號 | |||
| 交易編號 | 用戶的年齡(以年為單位) | |||
| 時間戳 | 交易的時間戳 | |||
| 事件種類 | 交易型別。可能的值: | |||
| fiat_deposit / fiat_withdrawal / crypto_deposit/ | ||||
| crypto_withdrawal / 交換法幣手段 | ||||
| “傳統”貨幣,如歐元、 | ||||
| 美元、英鎊等,而加密意味著代幣 | ||||
| 如BTC、CHSB、ETH等。 | ||||
| 存款是指從一個機構轉移資金 | ||||
| external account to SwissBorg, and withdrawal | ||||
| means the opposite. Exchange means trading one | ||||
| currency to another within the app. | ||||
| currency | The currency of the transaction. In case of | |||
| exchanges, it contains the format | ||||
| FromCurrency_ToCurrency. For instance, if | ||||
| BTC_USD, it means that the user traded BTC to | ||||
| USD | ||||
| amount_in_eur | The equivalent EUR amount of the transaction |
uj5u.com熱心網友回復:
我不清楚問題(c)。我如何知道提取的歐元金額?這些查詢是按照 SQL-SERVER 撰寫的,這與 MySQL 沒有太大區別,但請確保對日期添加語法進行更改,以防萬一它在 MySQL 中不起作用。
一個)
WITH DATA1 AS (
SELECT T1.USER_ID, SUM(T2.AMOUNT_IN_EUR) AS DEPOSITS FROM user_info T1 JOIN transaction_info T2 ON LOWER(T1.USER_ID) = LOWER(T2.user_id)
WHERE T2.event_kind = 'fiat_deposit'
AND
CAST( T2.TIMESTAMP AS datetime2 ) BETWEEN
CAST(T1.onboarding_completed_at AS datetime2) AND DATEADD(DAY, 4, CAST(T1.onboarding_completed_at AS datetime2) )
GROUP BY T1.user_id
)
SELECT DATA1.* FROM DATA1 WHERE DATA1.DEPOSITS >= '20000' ;
b)
WITH DATA1 AS (
SELECT T1.USER_ID, T2.CURRENCY, T2.amount_in_eur,
SUM(T2.AMOUNT_IN_EUR) OVER ( PARTITION BY T1.USER_ID) AS TOTAL_TRANSACTION
FROM USER_INFO T1 JOIN TRANSACTION_INFO T2 ON T1.user_id = T2.user_id
),
DATA2 AS (
SELECT DATA1.*, SUM(DATA1.AMOUNT_IN_EUR) OVER (PARTITION BY DATA1.USER_ID) AS TOTAL_TRANS_ETHBTC
FROM DATA1 WHERE DATA1.CURRENCY IN ('ETH','BTC')
),
DATA3 AS (
SELECT DATA2.*, (DATA2.TOTAL_TRANS_ETHBTC * 100) / DATA2.TOTAL_TRANSACTION AS TRANSACTION_ETHBTC_PERCENTAGE
FROM DATA2
)
SELECT DATA3.USER_ID, DATA3.TOTAL_TRANSACTION, DATA3.TOTAL_TRANS_ETHBTC,
ROUND(DATA3.TRANSACTION_ETHBTC_PERCENTAGE,2) AS ETH_BTC_PERCENT
FROM DATA3
WHERE DATA3.TRANSACTION_ETHBTC_PERCENTAGE >= '90'
GROUP BY DATA3.USER_ID, DATA3.TOTAL_TRANSACTION, DATA3.TOTAL_TRANS_ETHBTC, ROUND(DATA3.TRANSACTION_ETHBTC_PERCENTAGE,2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392793.html
標籤:sql
