【小练习】SQL_GROUP BY

 

 

  1. 哪个客户(按照名称)下的订单最早?你的答案应该包含订单的客户名称日期
    SELECT a.name, o.occurred_at
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    ORDER BY occurred_at
    LIMIT 1;
    
  2. 算出每个客户的总销售额(单位是美元)。答案应该包括两列:每个公司的订单总销售额(单位是美元)以及公司名称
    SELECT a.name, SUM(total_amt_usd) total_sales
    FROM orders o
    JOIN accounts a
    ON a.id = o.account_id
    GROUP BY a.name;
    
  3. 最近的 web_event 是通过哪个渠道发生的,与此 web_event 相关的客户是哪个?你的查询应该仅返回三个值:日期渠道客户名称
    SELECT w.occurred_at, w.channel, a.name
    FROM web_events w
    JOIN accounts a
    ON w.account_id = a.id 
    ORDER BY w.occurred_at DESC
    LIMIT 1;
    
  4. 算出 web_events 中每种渠道的次数。最终表格应该有两列:渠道和渠道的使用次数。
    SELECT w.channel, COUNT(*)
    FROM web_events w
    JOIN accounts a
    ON a.id = w.account_id
    GROUP BY w.channel
    
  5. 与最早的 web_event 相关的主要联系人是谁?
    SELECT a.primary_poc
    FROM web_events w
    JOIN accounts a
    ON a.id = w.account_id
    ORDER BY w.occurred_at
    LIMIT 1;
    
  6. 每个客户所下的最小订单是什么(以总金额(美元)为准)。答案只需两列:客户名称总金额(美元)。从最小金额到最大金额排序。
    SELECT a.name, MIN(total_amt_usd) smallest_order
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name
    ORDER BY smallest_order;
    奇怪的是,很多订单没有美元金额。我们可能需要检查下这些订单。                                                                                          以下写法是错的:                                                                                                                                                                        SELECT a.name, o.total_amt_usd
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name, o.total_amt_usd
    ORDER BY o.total_amt_usd
  7. 算出每个区域的销售代表人数。最终表格应该包含两列:区域和 sales_reps 数量。从最少到最多的代表人数排序。
    SELECT r.name, COUNT(*) num_reps
    FROM region r
    JOIN sales_reps s
    ON r.id = s.region_id
    GROUP BY r.name
    ORDER BY num_reps;

 

GROUP BY(第二部分)

 

  1. 对于每个客户,确定他们在订单中购买的每种纸张的平均数额。结果应该有四列:客户名称一列,每种纸张类型的平均数额一列。
    SELECT a.name, AVG(o.standard_qty) avg_stand, AVG(gloss_qty) avg_gloss, AVG(poster_qty) avg_post
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name;
    
  2. 对于每个客户,确定在每个订单中针对每个纸张类型的平均消费数额。结果应该有四列:客户名称一列,每种纸张类型的平均消费数额一列。
    SELECT a.name, AVG(o.standard_amt_usd) avg_stand, AVG(gloss_amt_usd) avg_gloss, AVG(poster_amt_usd) avg_post
    FROM accounts a
    JOIN orders o
    ON a.id = o.account_id
    GROUP BY a.name;
    
  3. 确定在 web_events 表格中每个销售代表使用特定渠道的次数。最终表格应该有三列:销售代表的名称渠道和发生次数。按照最高的发生次数在最上面对表格排序。
    SELECT s.name, w.channel, COUNT(*) num_events
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    GROUP BY s.name, w.channel
    ORDER BY num_events DESC;
    
  4. 确定在 web_events 表格中针对每个地区特定渠道的使用次数。最终表格应该有三列:区域名称渠道和发生次数。按照最高的发生次数在最上面对表格排序。
    SELECT r.name, w.channel, COUNT(*) num_events
    FROM accounts a
    JOIN web_events w
    ON a.id = w.account_id
    JOIN sales_reps s
    ON s.id = a.sales_rep_id
    JOIN region r
    ON r.id = s.region_id
    GROUP BY r.name, w.channel
    ORDER BY num_events DESC;

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值