leetcode刷题 MySQL 2.28

在这里插入图片描述

select Email from Person group by Email having count(Email)>1;

2.寻找2021年具有正收益的客户在这里插入图片描述

select customer_id from Customers where revenue>0 and year=2021

3.找出从不点东西的顾客
在这里插入图片描述

select name as Customers from Customers where not exit(select 1 from Orders Customers.id = Orders=id)

这个是一个子查询,先查出两张表id相同的,就是都点东西的顾客

4.计算每个雇员的奖金。如果一个雇员的 id 是 奇数 并且他的名字不是以 ‘M’ 开头,那么他的奖金是他工资的 100% ,否则奖金为 0
在这里插入图片描述

select employee_id,if( employee_id % 2 =1 and substr(name,1,1)!='M',salary,0) as bonus from Employees

不用想update,用if就可以了

5.请你编写解决方案,报告购买了产品 “A”,“B” 但没有购买产品 “C” 的客户的 customer_id 和 customer_name,因为我们想推荐他们购买这样的产品。
返回按 customer_id 排序 的结果表。
返回结果格式如下所示。
在这里插入图片描述

SELECT distinct c.customer_id, c.customer_name 
FROM Customers c
INNER JOIN Orders o ON o.customer_id = c.customer_id
WHERE c.customer_id NOT IN (SELECT customer_id FROM Orders WHERE product_name = 'C')
AND c.customer_id IN (SELECT customer_id FROM Orders WHERE product_name = 'A')
AND c.customer_id IN (SELECT customer_id FROM Orders WHERE product_name = 'B');

法2

2SELECT c.customer_id, c.customer_name 
FROM Orders o LEFT JOIN Customers c ON o.customer_id = c.customer_id
GROUP BY c.customer_id HAVING SUM(product_name = 'A')
*SUM(product_name = 'B') > 0 AND SUM(product_name = 'C') = 0 
ORDER BY c.customer_id 

我觉得这个就很绝,计算sum相乘数量不为0就可以看出AB不为0
6.在这里插入图片描述

SELECT student_id, course_id, grade
FROM (
    SELECT 
        student_id,
        course_id,
        grade,
        ROW_NUMBER() OVER (PARTITION BY student_id ORDER BY grade DESC, course_id) AS  row_num
    FROM Enrollments
) AS ranked
WHERE row_num = 1
ORDER BY student_id;

这个是窗口函数row_number用法

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值