# Championship的数字代表的就是赢得比赛的球员的id,可以使用行转列(UNION all)
#如果涉及到分组函数,建议还是不要写除了分组字段外的其他字段,因为不太符合标准sql
SELECT p.player_id,(SELECT player_name FROM Players WHERE player_id=p.player_id) player_name,count(*) grand_slams_count
FROM Players p
INNER JOIN
(SELECT WimbledonFROM ChampionshipsUNION allSELECT Fr_openFROM ChampionshipsUNION allSELECT US_openFROM ChampionshipsUNION allSELECT Au_openFROM Championships
)c
ON p.player_id=c.Wimbledon
GROUP BY 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
(SELECT distinct product_idFROM Products
)p1
LEFT JOIN
(SELECT p.product_id,p.new_price priceFROM(SELECT product_id,new_price,rank() over(partition by product_id ORDER BY change_date desc) rkFROM ProductsWHERE change_date<="2019-08-16")pWHERE 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是布尔类型
SELECT distinct c1.seat_id
FROM Cinema c1
INNER JOIN Cinema c2
ON abs(c1.seat_id-c2.seat_id)=1 AND c1.free=true AND c2.free=true
ORDER BY c1.seat_id