- 哪个客户(按照名称)下的订单最早?你的答案应该包含订单的客户名称和日期。
SELECT a.name, o.occurred_at FROM accounts a JOIN orders o ON a.id = o.account_id ORDER BY occurred_at LIMIT 1;
- 算出每个客户的总销售额(单位是美元)。答案应该包括两列:每个公司的订单总销售额(单位是美元)以及公司名称。
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;
- 最近的 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;
- 算出 web_events 中每种渠道的次数。最终表格应该有两列:渠道和渠道的使用次数。
SELECT w.channel, COUNT(*) FROM web_events w JOIN accounts a ON a.id = w.account_id GROUP BY w.channel
- 与最早的 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;
- 每个客户所下的最小订单是什么(以总金额(美元)为准)。答案只需两列:客户名称和总金额(美元)。从最小金额到最大金额排序。
奇怪的是,很多订单没有美元金额。我们可能需要检查下这些订单。 以下写法是错的: SELECT a.name, o.total_amt_usdSELECT 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;
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 - 算出每个区域的销售代表人数。最终表格应该包含两列:区域和 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(第二部分)
- 对于每个客户,确定他们在订单中购买的每种纸张的平均数额。结果应该有四列:客户名称一列,每种纸张类型的平均数额一列。
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;
- 对于每个客户,确定在每个订单中针对每个纸张类型的平均消费数额。结果应该有四列:客户名称一列,每种纸张类型的平均消费数额一列。
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;
- 确定在 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;
- 确定在 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;