leetcode刷题MySQL 3.5

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)这句话,全球平均通话时间,因为是两个人打电话

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值