# 多少天内使用Date_SUB函数,具体用法是Date_SUB(初始日期,interval 变更的天数 day) ,正数找过去负数找未来# 变更天数=多少天-if(是否包含初始日期,1,0),# 没分组时默认将整个表当成一组#注意有可能没有数据就要使用ifnullSELECTROUND(ifnull(avg(a.number),0),2) average_sessions_per_user
FROM(SELECT user_id,count(distinct session_id) number
FROM Activity
WHERE activity_date between DATE_SUB('2019-07-27',interval29day)and'2019-07-27'GROUPBY user_id
)a
1.3 运行截图
2 丢失信息的雇员
2.1 题目内容
2.1.1 基本题目信息1
2.1.2 基本题目信息2
2.1.3 示例输入输出
a 示例输入
b 示例输出
2.2 示例sql语句
# 用外连接,不满足的条件的字段用null值来填充SELECT e.employee_id
FROM Employees e
LEFTJOIN Salaries s
ON e.employee_id=s.employee_id
WHERE s.salary isnullUNIONSELECT s.employee_id
FROM Employees e
RIGHTJOIN Salaries s
ON e.employee_id=s.employee_id
WHERE e.name isnullORDERBY employee_id
2.3 运行截图
3 学生们参加各科测试的次数
3.1 题目内容
3.1.1 基本题目信息1
3.1.2 基本题目信息2
3.1.3 示例输入输出
a 示例输入1
b 示例输入2
c 示例输出
3.2 示例sql语句
# 使用笛卡尔积时(cross join)需要注意其连接条件SELECT s.student_id,s.student_name,s.subject_name,IFNULL(e.number,0) attended_exams
FROM(SELECT s1.student_id,s1.student_name,s2.subject_name
FROM Students s1
CROSSJOIN Subjects s2
)s
LEFTJOIN(SELECT student_id,subject_name,count(*) number
FROM Examinations
GROUPBY student_id,subject_name
) e
ON s.student_id=e.student_id AND s.subject_name=e.subject_name
ORDERBY s.student_id asc,s.subject_name asc