【牛客网】非技术快速入门题库
-
- 【牛客网】非技术快速入门题库 SQL 篇
-
- 1.查询所有列
- 2.查询多
- 3.查询结果去重
- 4.查询结果限制返回行数
- 5.将查询后的列重新命名
- 6.查找学校是北大的学生信息
- 7.查找年龄大于24岁的用户信息
- 8.查找某个年龄段的用户信息
- 9.查找除复旦大学的用户信息
- 10.用where过滤空值练习
- 11.高级操作符练习(1)
- 12.高级操作符练习(2)
- 13.Where in 和 Not in
- 14.操作符混合运用
- 15.查看学校名称中含北京的用户
- 16.查找GPA最高值
- 17.计算男生人数以及平均GPA
- 18.分组计算练习题
- 19.分组过滤练习题
- 20.分组排序练习题
- 21.浙江大学用户题目回答情况
- 22.统计每个学校的答过题的用户的平均答题数
- 23.统计每个学校各难度的用户平均刷题数
- 24.统计每个用户的平均刷题数
- 25.查找山东大学或者性别为男生的信息
- 26.计算25岁以上和以下的用户数量
- 27.查看不同年龄段的用户明细
- 28.计算用户8月每天的练题数量
- 29. 计算用户的平均次日留存率
- 30.统计每种性别的人数
- 31.提取博客URL中的用户名
- 32.截取出年龄
- 33.找出每个学校GPA最低的同学
- 34.统计复旦用户8月练题情况
- 35.浙大不同难度题目的正确率
- 36. 查找后排序
- 37.查找后多列排序
- 38.查找后降序排列
- 39.21年8月份练题总数
【牛客网】非技术快速入门题库 SQL 篇
1.查询所有列
-- 直接 select 所有的列就行,可以用 * ,但一般不建议直接用select *
-- 查询 user_profile 表中的所有记录和所有字段
SELECT *
FROM user_profile; -- 从用户资料表(user_profile)中选择所有数据
2.查询多
## 从用户资料表中查询设备ID、性别、年龄和大学信息
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
; -- 选择user_profile表中的device_id, gender, age, university字段的所有记录
3.查询结果去重
# 方法一
-- 从用户资料表中查询所有不同的大学信息
SELECT DISTINCT
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
; -- 选择user_profile表中的university字段,并去除重复项,仅保留不同的值
# 方法二
-- 从用户资料表中按第一个SELECT表达式(即university字段)分组,查询所有大学信息
SELECT
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
GROUP BY 1 -- 根据SELECT子句中的第一个字段(即university)对结果进行分组。这里的"1"是对SELECT列表中第一项的引用
; -- 这个查询会返回每个大学的一条记录,类似于使用DISTINCT的效果
# 其中 1 代表 select 后的第一个字段
4.查询结果限制返回行数
## 从用户资料表中查询设备ID,并限制结果从第1行开始的2行记录
SELECT
device_id -- 用户的设备ID
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
LIMIT 0, 2 -- 从第1条记录开始(索引为0),获取2条记录
; -- 这个查询会返回user_profile表中device_id字段的前两条记录
5.将查询后的列重新命名
## 从用户资料表中查询设备ID,并将结果列命名为user_infos_example,限制结果为前2行记录
SELECT
device_id AS user_infos_example -- 用户的设备ID,并将此列重命名为user_infos_example
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
LIMIT 2 -- 仅获取查询结果的前2条记录
; -- 这个查询会返回user_profile表中device_id字段的前两条记录,并将其显示为user_infos_example列
6.查找学校是北大的学生信息
## 从用户资料表中查询设备ID和大学信息,并筛选出大学为北京大学的记录
SELECT
device_id, -- 用户的设备ID
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university = '北京大学' -- 筛选条件:仅选择university字段值为'北京大学'的记录
; -- 这个查询会返回user_profile表中所有属于北京大学的用户的设备ID和大学名称
7.查找年龄大于24岁的用户信息
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄大于24岁的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age > 24 -- 筛选条件:仅选择age字段值大于24的记录
; -- 这个查询会返回user_profile表中所有年龄大于24岁的用户的设备ID、性别、年龄及大学名称
8.查找某个年龄段的用户信息
## 从用户资料表中查询设备ID、性别和年龄,并筛选出年龄在20到23岁之间的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age -- 用户的年龄
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age >= 20 AND age <= 23 -- 筛选条件:仅选择age字段值在20至23岁(包括20和23岁)之间的记录
; -- 这个查询会返回user_profile表中所有年龄介于20到23岁之间的用户的设备ID、性别及年龄
9.查找除复旦大学的用户信息
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出大学不是复旦大学的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university != '复旦大学' -- 筛选条件:仅选择university字段值不等于'复旦大学'的记录
; -- 这个查询会返回user_profile表中所有不属于复旦大学的用户的设备ID、性别、年龄及大学名称
10.用where过滤空值练习
## 从用户资料表中查询设备ID、性别、年龄和大学信息,并筛选出年龄字段非空的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university -- 用户所在的大学名称
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE age IS NOT NULL -- 筛选条件:仅选择age字段值非空(即已填写年龄信息)的记录
; -- 这个查询会返回user_profile表中所有有提供年龄信息的用户的设备ID、性别、年龄及大学名称
11.高级操作符练习(1)
## 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出GPA大于3.5且性别为男性的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE gpa > 3.5 AND gender = 'male' -- 筛选条件:仅选择gpa字段值大于3.5且gender字段值为'male'的记录
; -- 这个查询会返回user_profile表中所有GPA大于3.5并且性别为男性的用户的设备ID、性别、年龄、大学名称及GPA
12.高级操作符练习(2)
-- 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出大学为北京大学或GPA大于3.7的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university = '北京大学' OR gpa > 3.7 -- 筛选条件:选择university字段值为'北京大学'或者gpa字段值大于3.7的记录
; -- 这个查询会返回user_profile表中所有大学为北京大学或者GPA大于3.7的用户的设备ID、性别、年龄、大学名称及GPA
13.Where in 和 Not in
-- 从用户资料表中查询设备ID、性别、年龄、大学和GPA信息,并筛选出特定大学(北京大学、复旦大学、山东大学)的用户记录
SELECT
device_id, -- 用户的设备ID
gender, -- 用户的性别
age, -- 用户的年龄
university, -- 用户所在的大学名称
gpa -- 用户的平均成绩点数(GPA)
FROM user_profile -- 数据来源于user_profile表,该表存储了用户的个人信息
WHERE university IN ('北京大学', '复旦大学', '山东大学') -- 筛选条件:仅选择university字段值在指定列表内的记录,即'北京大学', '复旦大学', 或'山东大学'
; -- 这个查询会返回user_profile表中所有属于北京大学、复旦大学或山东大学的用户的设备ID、性别、年龄、大学名称及GPA
14.操作符混合运用
-- 查询符合条件的学生信息,包括设备ID、性别、年龄、大学和GPA
SELECT
device_id -- 设备ID
,gender -- 性别
,age -- 年龄
,university -- 大学
,gpa -- GPA(平均成绩)
FROM user_profile
WHERE
-- 筛选条件:对于山东大学的学生,要求GPA大于3.5
(gpa > 3.5 AND university = '山东大学')
OR
-- 对于复旦大学的学生,要求GPA大于3.8
(gpa > 3.8 AND university = '复旦大学')
-- 结果按照设备ID升序排列
ORDER BY device_id ASC;
15.查看学校名称中含北京的用户
-- 查询学校名称中包含“北京”的用户设备ID、年龄和学校名称
SELECT
device_id, -- 设备ID
age, -- 年龄
university -- 学校名称
FROM user_profile -- 从用户信息表中获取数据
WHERE university LIKE '%北京%'; -- 筛选出学校名称中包含“北京”的用户
# _:匹配任意一个字符;
# %:匹配 0 个或多个字符;
# [ ]:匹配 [ ] 中的任意一个字符(若要比较的字符是连续的,则可以用连字符 “-” 表达 );
# [^ ]:不匹配 [ ] 中的任意一个字符。
16.查找GPA最高值
# 方法一
## 查询复旦大学学生的最高GPA,并将结果四舍五入保留1位小数
SELECT
ROUND(MAX(gpa), 1) AS gpa -- 计算并格式化最高GPA
FROM user_profile -- 从用户信息表中获取数据
WHERE university = '复旦大学'; -- 筛选出复旦大学的学生
# 方法二
## 查询复旦大学学生的GPA信息,并获取GPA最高的学生
SELECT
gpa -- 平均成绩(GPA)
FROM user_profile -- 来自用户资料表
WHERE
university = '复旦大学' -- 筛选条件:仅选择大学为复旦大学的学生记录
ORDER BY gpa DESC -- 根据GPA成绩从高到低排序
LIMIT 1 -- 限制结果数量为1条,即只返回GPA最高的那一条记录
;
# 先筛选后排序,显示1列
# 方法三
## 查询复旦大学 GPA 最高的学生的 GPA
SELECT gpa
FROM (
-- 子查询:为每个复旦大学的学生按 GPA 降序排名
SELECT gpa,
ROW_NUMBER() OVER (PARTITION BY university ORDER BY gpa DESC) AS ranking
FROM user_profile
WHERE university = '复旦大学' -- 筛选出复旦大学的学生
) AS t -- 将子查询结果命名为 t