【牛客网】非技术快速入门题库 SQL 篇

【牛客网】非技术快速入门题库

    • 【牛客网】非技术快速入门题库 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 篇

牛客网在线编程_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

你可能感兴趣的:(数据库学习,数据库,sql)