1.写一个解决方案,报告在 2020 年 6 月和 7 月 每个月至少花费 $100 的客户的 customer_id 和 customer_name 。
SELECT c.customer_id, c.name
FROM Orders o
LEFT JOIN Customers c ON c.customer_id = o.customer_id
LEFT JOIN Product p ON p.product_id = o.product_id
group by c.customer_id
having sum(case when LEFT(o.order_date, 7) = '2020-06' then p.price * o.quantity else 0 end) >= 100
and sum(case when LEFT(o.order_date, 7) = '2020-07' then p.price * o.quantity else 0 end) >= 100
ps:left和substr不一样left从左开始截取字符串,substr可以指定
2.对于每一个 date_id 和 make_name,找出 不同 的 lead_id 以及 不同 的 partner_id 的数量。
按 任意顺序 返回结果表。
返回结果格式如下示例所示。
select date_id, make_name, count(distinct lead_id) unique_leads,
count(distinct partner_id) unique_partners
from DailySales
group by date_id, make_name
order by date_id
ps distinct关键字可以加在任意括号里面,计算不重复的id
3.编写解决方案, 报告在 2020 年 6 月份播放的儿童适宜电影的去重电影名.
返回的结果表单 没有顺序要求 .
select distinct title
from Content c
left join TVProgram t on t.content_id = c.content_id
where Kids_Content = 'Y'
and content_type = 'Movies'
and left(program_date, 7) = '2020-06'
4.一家电信公司想要投资新的国家。该公司想要投资的国家是: 该国的平均通话时长要严格地大于全球平均通话时长。
写一个解决方案, 找到所有该公司可以投资的国家。
SELECT b.name country
FROM (
SELECT c.name, AVG(duration) AS avg_duration
FROM (
SELECT caller_id AS id, duration FROM Calls
UNION ALL
SELECT callee_id AS id, duration FROM Calls
) AS a
LEFT JOIN Person AS p ON p.id = a.id
LEFT JOIN Country AS c ON c.country_code = LEFT(p.phone_number, 3)
GROUP BY c.country_code
) AS b
WHERE b.avg_duration > (SELECT AVG(duration) FROM Calls);
ps:最重要的,就是把那个Calls表格修改成a再连接起来以及求(SELECT AVG(duration) FROM Calls)这句话,全球平均通话时间,因为是两个人打电话