# Championship的数字代表的就是赢得比赛的球员的id,可以使用行转列(UNION all)#如果涉及到分组函数,建议还是不要写除了分组字段外的其他字段,因为不太符合标准sqlSELECT p.player_id,(SELECT player_name FROM Players WHERE player_id=p.player_id) player_name,count(*) grand_slams_count
FROM Players p
INNERJOIN(SELECT Wimbledon
FROM Championships
UNIONallSELECT Fr_open
FROM Championships
UNIONallSELECT US_open
FROM Championships
UNIONallSELECT Au_open
FROM Championships
)c
ON p.player_id=c.Wimbledon
GROUPBY p.player_id
1.3 运行截图
2 指定日期的产品价格
2.1 题目内容
2.1.1 基本题目信息
2.1.2 示例输入输出
2.2 示例sql语句
# 查出所有,然后根据需求用IF函数去进行相应的调整# 要同时选择两个表的数据,可以写两对(),每对里面写别名,通过别名去获取数据SELECT p1.product_id,IFNULL(p2.price,10) price
FROM(SELECTdistinct product_id
FROM Products
)p1
LEFTJOIN(SELECT p.product_id,p.new_price price
FROM(SELECT product_id,new_price,rank()over(partitionby product_id ORDERBY change_date desc) rk
FROM Products
WHERE change_date<="2019-08-16")p
WHERE rk=1)p2
ON p1.product_id=p2.product_id
2.3 运行截图
3 连续空余座位
3.1 题目内容
3.1.1 基本题目信息
3.1.2 示例输入输出
3.2 示例sql语句
# 连续可以考虑使用abs(差值)=1的方式来处理,处于中间的就需要去去重# 注意 free是布尔类型SELECTdistinct c1.seat_id
FROM Cinema c1
INNERJOIN Cinema c2
ON abs(c1.seat_id-c2.seat_id)=1AND c1.free=trueAND c2.free=trueORDERBY c1.seat_id