0
点赞
收藏
分享

微信扫一扫

牛客网SQL非技术快速入门


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 AS user_infors_example
FROM user_profile
LIMIT 2

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 '%北京%'

SQL16 查找GPA最高值

SELECT MAX(gpa) AS gpa
FROM user_profile
WHERE university = '复旦大学'

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

SELECT COUNT(1) AS male_num, ROUND(AVG(gpa), 1) AS avg_gpa
FROM user_profile
WHERE gender = 'male'

SQL18 分组计算练习题

SELECT gender, university, COUNT(1) AS user_num, AVG(active_days_within_30) AS avg_active_days, AVG(question_cnt) AS avg_question_cnt
FROM user_profile
GROUP BY gender, university

SQL19 分组过滤练习题

SELECT university, AVG(question_cnt) AS avg_question_cnt, AVG(answer_cnt) AS avg_answer_cnt
FROM user_profile
GROUP BY university
HAVING avg_question_cnt < 5 OR avg_answer_cnt < 20

SQL20 分组排序练习题

SELECT university, AVG(question_cnt) AS avg_question_cnt
FROM user_profile
GROUP BY university
ORDER BY avg_question_cnt ASC

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

SELECT u.device_id, q.question_id, q.result
FROM user_profile AS u JOIN question_practice_detail AS q ON u.device_id = q.device_id
WHERE u.university = '浙江大学'

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

SELECT u.university, COUNT(1) / COUNT(DISTINCT u.device_id) AS avg_answer_cnt
FROM user_profile AS u JOIN question_practice_detail AS q ON u.device_id = q.device_id
GROUP BY u.university

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

SELECT u.university, d.difficult_level, COUNT(1) / COUNT(DISTINCT u.device_id) AS avg_answer_cnt
FROM user_profile AS u JOIN question_practice_detail AS p ON u.device_id = p.device_id JOIN question_detail AS d ON p.question_id = d.question_id
GROUP BY u.university, d.difficult_level

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

SELECT u.university, d.difficult_level, COUNT(1) / COUNT(DISTINCT u.device_id) AS avg_answer_cnt
FROM user_profile AS u JOIN question_practice_detail AS p ON u.device_id = p.device_id JOIN question_detail AS d ON p.question_id = d.question_id
WHERE u.university = '山东大学'
GROUP BY u.university, d.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'

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

SELECT IF(age >= 25, '25岁及以上', '25岁以下') AS age_cut, COUNT(1) AS Number
FROM user_profile
GROUP BY age_cut

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

SELECT
    device_id,
    gender,
    CASE
        WHEN age IS NULL THEN '其他'
        WHEN age < 20 THEN '20岁以下'
        WHEN age <= 24 THEN '20-24岁'
        ELSE '25岁以上'
    END AS age_cut
FROM user_profile

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

SELECT DAY(date) AS day, COUNT(1) AS question_cnt
FROM question_practice_detail
WHERE YEAR(date) = '2021' AND MONTH(date) = '8'
GROUP BY day

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

SELECT COUNT(q2.date) / COUNT(1) AS avg_ret
FROM (
    SELECT DISTINCT device_id, date
    FROM question_practice_detail
) q1 LEFT JOIN (
    SELECT DISTINCT device_id, date
    FROM question_practice_detail
) q2 ON q1.device_id = q2.device_id AND DATE_ADD(q1.date, INTERVAL 1 DAY) = q2.date

SQL30 统计每种性别的人数

SELECT SUBSTRING_INDEX(profile, ',', '-1') AS gender, COUNT(1) AS number
FROM user_submit
GROUP BY gender

SQL31 提取博客URL中的用户名

SELECT device_id, SUBSTRING_INDEX(blog_url, '/', '-1')
FROM user_submit

SQL32 截取出年龄

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(profile, ',', '3'), ',', '-1') AS age, COUNT(1) AS number
FROM user_submit
GROUP BY age

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

SELECT temp.device_id, temp.university, temp.gpa
FROM (
    SELECT device_id, university, gpa, RANK() OVER (PARTITION BY university ORDER BY gpa ASC) AS r
    FROM user_profile
) temp
WHERE temp.r = 1

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

SELECT u.device_id, u.university, COUNT(q.question_id) AS question_cnt, SUM(IF(q.result = 'right', 1, 0)) AS right_question_cnt
FROM user_profile AS u LEFT JOIN question_practice_detail AS q ON u.device_id = q.device_id
WHERE u.university = '复旦大学' AND (q.date IS NULL OR MONTH(q.date) = 8)
GROUP BY u.device_id

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

SELECT d.difficult_level, SUM(IF(p.result = 'right', 1, 0)) / COUNT(1) AS correct_rate
FROM user_profile AS u JOIN question_practice_detail AS p ON u.device_id = p.device_id JOIN question_detail AS d ON p.question_id = d.question_id
WHERE u.university = '浙江大学'
GROUP BY d.difficult_level
ORDER BY correct_rate ASC

SQL36 查找后排序

SELECT device_id, age
FROM user_profile
ORDER BY age ASC

SQL37 查找后多列排序

SELECT device_id, gpa, age
FROM user_profile
ORDER BY gpa ASC, age ASC

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(1) AS question_cnt
FROM question_practice_detail
WHERE YEAR(date) = 2021 AND MONTH(date) = 8

举报

相关推荐

0 条评论