力扣sql基础篇(四)

本文介绍了三个SQL问题的解决方案:1)如何查询每位学生的最高成绩,使用了rank()函数进行排序;2)查找购买了产品A和产品B但未购买产品C的顾客,利用了聚合函数sum();3)计算布尔表达式的值,通过对不同比较运算符的判断实现。
摘要由CSDN通过智能技术生成

力扣sql基础篇(四)

1 每位学生的最高成绩

1.1 题目内容

1.1.1 基本题目信息

在这里插入图片描述

1.1.2 示例输入输出

在这里插入图片描述

1.2 示例sql语句

# rank()函数间隔排序 若前两个字段值相同且都是并列的第一名,那么后面的一个非连续数字就是第三名 如 1 1 3
SELECT e.student_id,e.course_id,e.grade
FROM
(
  SELECT *,rank() over(partition by student_id order by grade desc,course_id asc) rk
  FROM Enrollments
)e
WHERE e.rk=1;

1.3 运行截图

在这里插入图片描述

2 购买了产品A和产品B却没有购买产品c的顾客

2.1 题目内容

2.1.1 基本题目信息

在这里插入图片描述

2.1.2 示例输入输出

在这里插入图片描述

2.2 示例sql语句

# sum(条件表达式) 作用:(用于统计满足条件的行数) 使用规则:若条件表达式成立就加1,否则不做任何变化
# 顾客是有可能买了该商品多次,就会有该商品的多个订单,所以条件为>=1
SELECT customer_id,customer_name
FROM Customers
WHERE customer_id in(
    SELECT customer_id
    FROM Orders
    GROUP BY customer_id
    HAVING sum(product_name='A')>=1 AND sum(product_name='B')>=1 AND sum(product_name='c')=0
)

2.3 运行截图

在这里插入图片描述

3 计算布尔表达式的值

3.1 题目内容

3.1.1 基本题目信息

在这里插入图片描述

3.1.2 示例输入输出

在这里插入图片描述

3.2 示例sql语句

# 全部考虑为真的情况,剩下的就是假的(真的情况相对少一些),true需要打上双引号,不打上的话默认值true就为1,false为0
# 如果想要在SELECT子句中的子查询中使用该表条件,可以给表取个别名,通过别名.方式去调用
SELECT e.left_operand,e.operator,e.right_operand,case
  when e.operator='>' AND e.t1>e.t2 then "true"
  when e.operator='<' AND e.t1<e.t2 then "true"
  when e.operator='=' AND e.t1=e.t2 then "true"
  else "false" end value
FROM
( 
  SELECT left_operand,operator,right_operand,(SELECT value FROM Variables WHERE name=e1.left_operand) t1,(SELECT value FROM Variables WHERE name=e1.right_operand) t2
  FROM Expressions e1
)e

3.3 运行截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值