1. 程式人生 > >【小練習】SQL_CASE

【小練習】SQL_CASE

CASE

  1. 我們想要根據相關的購買量了解三組不同的客戶。最高的一組是終身價值(所有訂單的總銷售額)大於 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
    SUM(total_amt_usd) > 100000 THEN 'middle' ELSE 'low' END AS customer_level FROM orders o JOIN accounts a ON o.account_id = a.id GROUP BY a.name ORDER BY 2 DESC;
  2. 現在我們想要執行和第一個問題相似的計算過程,但是我們想要獲取在 2016 年和 2017 年客戶的總消費數額。級別和上一個問題保持一樣。消費最高的客戶列在最上面。

    SELECT a.name, SUM(total_amt_usd) total_spent, 
         CASE
    WHEN SUM(total_amt_usd) > 200000 THEN 'top' WHEN SUM(total_amt_usd) > 100000 THEN 'middle' ELSE 'low' END AS customer_level FROM orders o JOIN accounts a ON o.account_id = a.id WHERE occurred_at > '2015-12-31' GROUP BY 1 ORDER BY 2 DESC;
  3. 我們想要找出績效最高的銷售代表,也就是有超過 200 個訂單的銷售代表。建立一個包含以下列的表格:銷售代表名稱
    、訂單總量和標為 top 或 not 的列(取決於是否擁有超過 200 個訂單)。銷售量最高的銷售代表列在最上面。
    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;
    
    值得注意的是,上述語句假定每個名稱是唯一的,好幾次都是這麼假定的。否則需要根據名稱和 ID 拆分表格。

  4. 之前的問題沒有考慮中間水平的銷售代表或銷售額。管理層決定也要看看這些資料。我們想要找出績效很高的銷售代表,也就是有超過 200 個訂單或總銷售額超過 750000 美元的銷售代表。中間級別是指有超過 150 個訂單或銷售額超過 500000 美元的銷售代表。建立一個包含以下列的表格:銷售代表名稱、總訂單量、所有訂單的總銷售額,以及標為 topmiddle 或 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;
    
    根據上述標準,你可能會見到幾個表現很差的銷售代表!

另: