【小練習】SQL_CASE
阿新 • • 發佈:2019-02-10
CASE
我們想要根據相關的購買量了解三組不同的客戶。最高的一組是終身價值(所有訂單的總銷售額)
大於 200,000
美元的客戶。第二組是在200,000 到 100,000
美元之間的客戶。最低的一組是低於under 100,000
美元的客戶。請提供一個表格,其中包含與每個客戶相關的級別。你應該提供客戶的名稱、所有訂單的總銷售額和級別。消費最高的客戶列在最上面。SELECT a.name, SUM(total_amt_usd) total_spent, 為什麼不是SUM(o.total_amt_usd) ??? CASE WHEN SUM(total_amt_usd) > 200000 THEN 'top' WHEN
現在我們想要執行和第一個問題相似的計算過程,但是我們想要獲取在
2016
年和2017
年客戶的總消費數額。級別和上一個問題保持一樣。消費最高的客戶列在最上面。SELECT a.name, SUM(total_amt_usd) total_spent, CASE
- 我們想要找出績效最高的銷售代表,也就是有超過 200 個訂單的銷售代表。建立一個包含以下列的表格:銷售代表名稱
top
或not
的列(取決於是否擁有超過 200 個訂單)。銷售量最高的銷售代表列在最上面。
值得注意的是,上述語句假定每個名稱是唯一的,好幾次都是這麼假定的。否則需要根據名稱和 ID 拆分表格。SELECT s.name, COUNT(*) num_ords, CASE WHEN COUNT(*) > 200 THEN 'top' ELSE 'not' END AS sales_rep_level FROM orders o JOIN accounts a ON o.account_id = a.id JOIN sales_reps s ON s.id = a.sales_rep_id GROUP BY s.name ORDER BY 2 DESC;
- 之前的問題沒有考慮中間水平的銷售代表或銷售額。管理層決定也要看看這些資料。我們想要找出績效很高的銷售代表,也就是有超過
200
個訂單或總銷售額超過750000
美元的銷售代表。中間
級別是指有超過 150 個訂單或銷售額超過500000
美元的銷售代表。建立一個包含以下列的表格:銷售代表名稱、總訂單量、所有訂單的總銷售額,以及標為top
、middle
或low
的列(取決於上述條件)。在最終表格中將銷售額最高的銷售代表列在最上面。
根據上述標準,你可能會見到幾個表現很差的銷售代表!SELECT s.name, COUNT(*), SUM(o.total_amt_usd) total_spent, CASE WHEN COUNT(*) > 200 OR SUM(o.total_amt_usd) > 750000 THEN 'top' WHEN COUNT(*) > 150 OR SUM(o.total_amt_usd) > 500000 THEN 'middle' ELSE 'low' END AS sales_rep_level FROM orders o JOIN accounts a ON o.account_id = a.id JOIN sales_reps s ON s.id = a.sales_rep_id GROUP BY s.name ORDER BY 3 DESC;
另: