NowCoder刷题 SQL篇

该文提供了一个SQL学习路径,涵盖基础查询如查询所有列和去重,条件查询如使用WHERE子句和操作符,高级查询包括计算函数、分组与排序,多表查询涉及子查询、连接查询和组合查询,以及常用的函数应用,如日期、文本和窗口函数。文章适合SQL初学者快速入门和提升。
摘要由CSDN通过智能技术生成

NowCoder刷题 SQL篇 非技术快速入门

01 基础查询

基础查询

SQL1 查询所有列

在这里插入图片描述

  • 参考代码:
SELECT * FROM user_profile

在这里插入图片描述

SQL2 查询多列

在这里插入图片描述

  • 参考代码
select device_id, gender, age, university from user_profile

在这里插入图片描述

简单处理查询结果

SQL3 查询结果去重

在这里插入图片描述

  • 参考代码
select distinct(university) from user_profile

在这里插入图片描述

SQL4 查询结果限制返回行数

在这里插入图片描述

  • 参考代码
select device_id from user_profile limit 2

在这里插入图片描述

SQL5 将查询后的列重新命名

在这里插入图片描述

  • 参考代码
SELECT device_id user_infos_example FROM user_profile LIMIT 2

在这里插入图片描述

02 条件查询

基础操作符

SQL6 查找学校是北大的学生信息

在这里插入图片描述

  • 参考代码
SELECT device_id, university FROM user_profile WHERE university = '北京大学'

在这里插入图片描述

SQL7 查找年龄大于24岁的用户信息

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university FROM user_profile WHERE age >= 24

在这里插入图片描述

SQL8 查找某个年龄段的用户信息

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age FROM user_profile
WHERE age BETWEEN 20 AND 23

在这里插入图片描述

SQL9 查找除复旦大学的用户信息

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university FROM user_profile
WHERE university <> '复旦大学'

在这里插入图片描述

SQL10 用where过滤空值练习

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university FROM user_profile
WHERE age IS NOT NULL

在这里插入图片描述

高级操作符

SQL11 高级操作符练习(1)

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university, gpa FROM user_profile
WHERE gender = 'male'
AND gpa > 3.5

在这里插入图片描述

SQL12 高级操作符练习(2)

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university, gpa FROM user_profile
WHERE university = '北京大学'
OR gpa > 3.7

在这里插入图片描述

SQL13 Where in 和Not in

在这里插入图片描述

  • 参考代码
SELECT device_id, gender, age, university, gpa FROM user_profile
WHERE university IN ('北京大学', '复旦大学', '山东大学')

在这里插入图片描述

SQL14 操作符混合运用

在这里插入图片描述

  • 参考代码
SELECT  device_id, gender, age, university, gpa
FROM user_profile
where (gpa > 3.5 and university = '山东大学') OR (gpa > 3.8 and university = '复旦大学')

在这里插入图片描述

SQL15 查看学校名称中含北京的用户

在这里插入图片描述

  • 参考代码
SELECT device_id, age, 	university FROM user_profile
WHERE university LIKE '%北京%'

在这里插入图片描述

03 高级查询

计算函数

SQL16 查找GPA最高值

在这里插入图片描述

  • 参考代码
SELECT gpa FROM user_profile
WHERE university = '复旦大学'
ORDER BY gpa DESC
LIMIT 1

在这里插入图片描述

SQL17 计算男生人数以及平均GPA

在这里插入图片描述

  • 参考代码
SELECT COUNT(gender) AS male_num,
ROUND(AVG(gpa),1) AS avg_gpa
FROM user_profile
WHERE gender = 'male'

在这里插入图片描述

分组查询

SQL18 分组计算练习题

在这里插入图片描述

  • 参考代码
SELECT gender,
university,
COUNT(device_id) AS user_num,
ROUND(AVG(active_days_within_30), 1) AS avg_active_day,
ROUND(AVG(question_cnt), 1) AS avg_question_cnt
FROM user_profile
GROUP BY gender, university

在这里插入图片描述

SQL18 分组计算练习题

在这里插入图片描述

  • 参考代码
SELECT university,
ROUND(AVG(question_cnt), 3) AS 	avg_question_cnt,
ROUND(AVG(answer_cnt), 3)  AS avg_answer_cnt
FROM user_profile
GROUP BY university
HAVING avg_question_cnt < 5
OR avg_answer_cnt < 20

在这里插入图片描述

SQL20 分组排序练习题

在这里插入图片描述

  • 参考代码
SELECT university,
ROUND(AVG(question_cnt), 4) AS avg_question_cnt
FROM user_profile
GROUP BY university
ORDER BY avg_question_cnt

在这里插入图片描述

04 多表查询

子查询

SQL21 浙江大学用户题目回答情况

在这里插入图片描述

  • 参考代码
SELECT A.device_id,
A.question_id,
A.result
FROM question_practice_detail A
LEFT JOIN user_profile B
ON A.device_id = B.device_id
WHERE B.university = '浙江大学'
ORDER BY A.question_id

在这里插入图片描述

连接查询

SQL22 统计每个学校的答过题的用户的平均答题数

在这里插入图片描述

  • 参考代码
SELECT A.university,
COUNT(B.question_id)/COUNT(DISTINCT(A.device_id)) AS avg_answer_cnt
FROM user_profile AS A 
JOIN question_practice_detail AS B
ON A.device_id = B.device_id
GROUP BY A.university

在这里插入图片描述

SQL23 统计每个学校各难度的用户平均刷题数

在这里插入图片描述

  • 参考代码
SELECT A.university,
C.difficult_level,
COUNT(B.question_id)/COUNT(DISTINCT(A.device_id)) AS avg_answer_cnt
FROM user_profile AS A
JOIN question_practice_detail AS B
ON A.device_id = B.device_id
JOIN question_detail AS C
ON B.question_id = C.question_id
GROUP BY A.university, C.difficult_level

在这里插入图片描述

SQL24 统计每个用户的平均刷题数

在这里插入图片描述

  • 参考代码
SELECT T1.university,
T3.difficult_level,
ROUND(COUNT(T2.question_id)/COUNT(DISTINCT(T1.device_id)), 4) AS avg_answer_cnt 
FROM user_profile AS T1
JOIN question_practice_detail T2
ON T1.device_id = T2.device_id
JOIN question_detail T3
ON T2.question_id = T3.question_id
WHERE T1.university = '山东大学'
GROUP BY T1.university, T3.difficult_level

在这里插入图片描述

组合查询

SQL25 查找山东大学或者性别为男生的信息

在这里插入图片描述

  • 参考代码
SELECT device_id,
gender,
age,
gpa
FROM user_profile
WHERE university = '山东大学'
UNION ALL
SELECT device_id,
gender,
age,
gpa
FROM user_profile
WHERE gender = 'male'

在这里插入图片描述

05 必会的常用函数

条件函数

SQL26 计算25岁以上和以下的用户数量

在这里插入图片描述

  • 参考代码
SELECT CASE WHEN age < 25 OR age IS NULL THEN '25岁以下'
WHEN age >= 25 THEN '25岁及以上'
END age_cut,COUNT(*)number
FROM user_profile
GROUP BY age_cut

在这里插入图片描述

SQL27 查看不同年龄段的用户明细

在这里插入图片描述

  • 参考代码
SELECT device_id,
gender,
CASE WHEN age < 20 THEN '20岁以下'
WHEN age BETWEEN 20 AND 24 THEN '20-24岁'
WHEN age >= 25 THEN '25岁及以上'
ELSE '其他'
END age_cut
FROM user_profile

在这里插入图片描述

日期函数

SQL28 计算用户8月每天的练题数量

在这里插入图片描述

  • 参考代码
SELECT DAY(date) AS day,
COUNT(question_id) AS question_cnt
FROM question_practice_detail
WHERE LEFT(date, 7) = '2021-08'
GROUP BY day

在这里插入图片描述

SQL29 计算用户的平均次日留存率

在这里插入图片描述

  • 参考代码
SELECT COUNT(T2.date)/COUNT(T1.date) FROM
(SELECT DISTINCT device_id, date FROM question_practice_detail) T1
LEFT JOIN
(SELECT DISTINCT device_id, date FROM question_practice_detail) T2
ON T1.device_id = T2.device_id
AND T2.date = date_add(T1.date, interval 1 day)

在这里插入图片描述

文本函数

SQL30 统计每种性别的人数

在这里插入图片描述

  • 参考代码
SELECT SUBSTRING_INDEX(profile, ',', -1) AS gender,
COUNT(device_id) AS number
FROM user_submit
GROUP BY gender

在这里插入图片描述

SQL31 提取博客URL中的用户名

在这里插入图片描述

  • 参考代码
SELECT device_id,
SUBSTRING_INDEX(blog_url, '/', -1) AS user_name
FROM user_submit

在这里插入图片描述

SQL32 截取出年龄

在这里插入图片描述

  • 参考代码
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(profile, ',', -2), ',', 1) AS age,
COUNT(device_id) AS number
FROM user_submit
GROUP BY age

在这里插入图片描述

窗口函数

SQL33 找出每个学校GPA最低的同学

在这里插入图片描述

  • 参考代码
SELECT device_id,
university,
gpa
FROM (
    SELECT device_id,
    university,
    gpa,
    ROW_NUMBER() OVER(PARTITION BY university ORDER BY gpa) AS RK
    FROM user_profile
)T
WHERE T.RK = 1

在这里插入图片描述

06 综合练习

综合练习

SQL34 统计复旦用户8月练题情况

在这里插入图片描述

  • 参考代码
SELECT T1.device_id,
T1.university,
SUM(IF(T2.result is NOT NULL, 1, 0)) AS question_cnt,
SUM(IF(T2.result = 'right', 1, 0)) AS right_question_cnt
FROM user_profile AS T1
LEFT JOIN question_practice_detail AS T2
ON T1.device_id=T2.device_id
WHERE T1.university='复旦大学' AND (MONTH(T2.date)=8 OR T2.date is NULL)
GROUP BY T1.device_id

在这里插入图片描述

SQL35 浙大不同难度题目的正确率

在这里插入图片描述

  • 参考代码
SELECT 
T3.difficult_level,
ROUND(SUM(IF(T2.result = 'right', 1, 0))/COUNT(T2.result), 4) AS correct_rate
FROM user_profile AS T1
LEFT JOIN question_practice_detail AS T2
ON T1.device_id = T2.device_id
LEFT JOIN question_detail T3
ON T2.question_id = T3.question_id
WHERE T1.university = '浙江大学'
AND T3.difficult_level IS NOT NULL
GROUP BY T3.difficult_level
ORDER BY correct_rate

在这里插入图片描述

SQL36 查找后排序

在这里插入图片描述

  • 参考代码
SELECT device_id,
age
FROM user_profile
ORDER BY age

在这里插入图片描述

SQL37 查找后多列排序

在这里插入图片描述

  • 参考代码
SELECT device_id,
gpa,
age
FROM user_profile
ORDER BY gpa, age

在这里插入图片描述

SQL38 查找后降序排列

在这里插入图片描述

  • 参考代码
SELECT device_id,
gpa,
age
FROM user_profile
ORDER BY gpa DESC, age DESC

在这里插入图片描述

SQL39 21年8月份练题总数

在这里插入图片描述

  • 参考代码
SELECT COUNT(DISTINCT(device_id)) AS did_cnt,
COUNT(question_id) AS question_cnt
FROM question_practice_detail
WHERE LEFT(date, 7) = '2021-08'
ORDER BY did_cnt
  • 参考代码优化,面对大数据时提升效率
SELECT COUNT(did_cnt),
SUM(question_cnt)
FROM (
    SELECT COUNT(device_id) AS did_cnt,
    COUNT(question_id) AS question_cnt
    FROM question_practice_detail
    WHERE date >= '2021-08-01' and date <= '2021-08-31'
    GROUP BY device_id
)T

在这里插入图片描述

完结

当然,我可以为您介绍一下 SQL Server 刷题的相关内容。SQL Server 是一种关系型数据库管理系统,用于存储和管理大量结构化数据。在刷题过程中,您可以通过解决一系列与 SQL Server 相关的问题来提高对其的理解和应用能力。 以下是一些常见的 SQL Server 刷题方向和相关问题: 1. SQL 基础知识: - 什么是 SQL Server?它有哪些特点和优势? - SQL Server 中的数据类型有哪些?它们分别用于存储什么类型的数据? - 如何创建数据库和表格? - 如何插入、更新和删除数据? - 如何使用 SELECT 语句查询数据? 2. 数据查询与筛 - 如何使用 WHERE 子句进行条件选? - 如何使用 ORDER BY 子句对查询结果进行排序? - 如何使用 GROUP BY 子句进行分组聚合操作? - 如何使用 HAVING 子句进行条件筛选(针对分组后的结果)? . 数据操作与修改: - 如何使用 UPDATE 语句修改表格中的数据? - 如何使用 DELETE 语句删除表格中的数据? - 如何使用 INSERT INTO 语句插入新的数据? 4. 数据连接与联结: - 如何使用 JOIN 连接多个表格? - 什么是内连接、外连接和交叉连接? - 如何使用子查询进行复杂的数据查询? 5. 数据聚合与统计: - 如何使用聚合函数(如 SUM、AVG、COUNT、MAX、MIN)进行数据统计? - 如何使用 GROUP BY 子句进行分组统计? - 如何使用 HAVING 子句进行条件筛选(针对分组后的统计结果)? 这些问题只是 SQL Server 刷题中的一部分,您可以根据自己的需求和水平选择适合的题目进行练习。同时,还可以参考 SQL Server 官方文档、教程和在线资源来深入学习和提高技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值