• 牛客网SQL基础强化


    SQL40 分页显示第三页的结果

    1. SELECT *
    2. FROM user_profile
    3. ORDER BY device_id
    4. LIMIT 6, 3

    SQL41 筛选出学校名中包含特定关键词的用户

    1. SELECT id, device_id, university
    2. FROM user_profile
    3. WHERE university REGEXP '^(北京|上海).*(职业|专科|成人).*(学院|校区)$'

    SQL42 每个学校的平均年龄和平均绩点及整体情况

    1. SELECT IFNULL(university, '总体') AS university, ROUND(AVG(age), 3) AS avg_age, ROUND(AVG(gpa), 3) AS avg_gpa
    2. FROM user_profile
    3. GROUP BY university WITH ROLLUP
    4. ORDER BY university

    SQL43 每个学校有哪些年龄的学生

    1. SELECT university, GROUP_CONCAT(DISTINCT age ORDER BY age) AS age_concat
    2. FROM user_profile
    3. GROUP BY university

    SQL44 学生数不大于2的学校的学生情况

    1. SELECT university, COUNT(1) AS cnt, GROUP_CONCAT(device_id SEPARATOR ';') AS device_list
    2. FROM user_profile
    3. GROUP BY university
    4. HAVING cnt <= 2

    SQL45 每个年龄的学生在各学校最大数量

    1. SELECT age, MAX(cnt) AS max_cnt
    2. FROM (
    3. SELECT university, age, COUNT(1) AS cnt
    4. FROM user_profile
    5. GROUP BY university, age
    6. ) tmp
    7. GROUP BY age
    8. ORDER BY max_cnt DESC

    SQL46 存在绩点大于该校平均绩点时的学生信息

    1. SELECT usr.device_id, usr.university
    2. FROM user_profile AS usr INNER JOIN (
    3. SELECT university, AVG(gpa) AS avg_gpa
    4. FROM user_profile
    5. GROUP BY university
    6. HAVING AVG(gpa) > 3.6
    7. ) univ ON usr.university = univ.university
    8. WHERE usr.gpa > univ.avg_gpa
    9. ORDER BY device_id DESC

    SQL47 平均绩点大于3.6且总人数大于2的学校里学生情况

    1. SELECT university, COUNT(1) AS total_cnt, SUM(IF(gender = 'male', 1, 0)) AS male_cnt, SUM(IF(gender = 'female', 1, 0)) AS female_cnt, SUM(IF(age < 23, 1, 0)) AS lt23_cnt
    2. FROM user_profile
    3. GROUP BY university
    4. HAVING AVG(gpa) > 3.6 AND COUNT(1) > 2

    SQL48 所有用户对高难度题目的刷题数

    1. SELECT usr.device_id, CONVERT(SUM(IF(question.difficult_level = 'hard', 1, 0)), SIGNED) AS question_cnt
    2. FROM user_profile AS usr LEFT JOIN question_practice_detail AS practice ON usr.device_id = practice.device_id LEFT JOIN question_detail AS question ON practice.question_id = question.question_id
    3. GROUP BY usr.device_id
    4. ORDER BY question_cnt

    SQL49 北京大学或练题数大于2的学生ID

    1. SELECT device_id
    2. FROM user_profile
    3. WHERE university = '北京大学'
    4. UNION
    5. SELECT usr.device_id
    6. FROM user_profile AS usr INNER JOIN question_practice_detail AS practice ON usr.device_id = practice.device_id
    7. GROUP BY usr.device_id
    8. HAVING COUNT(1) > 2
    9. ORDER BY device_id DESC

    SQL50 各年级学生的平均绩点

    1. SELECT
    2. CASE graduate_year
    3. WHEN 2022 THEN '大四'
    4. WHEN 2023 THEN '大三'
    5. WHEN 2024 THEN '大二'
    6. WHEN 2025 THEN '大一'
    7. END AS grade,
    8. ROUND(AVG(gpa), 2) AS avg_gpa
    9. FROM
    10. user_profile
    11. WHERE
    12. graduate_year BETWEEN 2022 AND 2025
    13. GROUP BY
    14. graduate_year
    15. ORDER BY
    16. avg_gpa DESC

    SQL51 每个用户的第一有效信息

    1. SELECT device_id,
    2. CASE WHEN answer_cnt IS NOT NULL THEN CONCAT('答题数:', answer_cnt)
    3. WHEN gpa IS NOT NULL THEN CONCAT('gpa:', gpa)
    4. WHEN age IS NOT NULL THEN CONCAT('年龄:', age)
    5. ELSE '暂无关键信息'
    6. END AS key_info
    7. FROM
    8. user_profile
    9. ORDER BY
    10. device_id

    SQL52 每月各旬有多少人练题

    1. SELECT
    2. dt_range,
    3. COUNT(DISTINCT device_id) AS cnt
    4. FROM
    5. (
    6. SELECT
    7. device_id,
    8. CONCAT(
    9. SUBSTRING(event_date, 1, 4),
    10. '年',
    11. SUBSTRING(event_date, 6, 2),
    12. '月',
    13. CASE
    14. WHEN DAY(event_date) BETWEEN 1 AND 9 THEN '上旬'
    15. WHEN DAY(event_date) BETWEEN 10 AND 19 THEN '中旬'
    16. ELSE '下旬'
    17. END
    18. ) AS dt_range
    19. FROM
    20. question_practice_detail
    21. ) tmp
    22. GROUP BY
    23. dt_range
    24. ORDER BY
    25. SUBSTRING(dt_range, 1, 8) DESC,
    26. cnt DESC

    SQL53 用户每月最后一周的练题数

    1. SELECT device_id, DATE_FORMAT(event_date, '%Y年%m月') AS ym, COUNT(1) AS cnt
    2. FROM question_practice_detail
    3. WHERE event_date > DATE_SUB(LAST_DAY(event_date), INTERVAL 1 WEEK)
    4. GROUP BY device_id, DATE_FORMAT(event_date, '%Y年%m月')
    5. ORDER BY device_id, ym

    SQL54 用户昵称超长的用户

    1. SELECT device_id, nick_name, CHAR_LENGTH(nick_name) AS nick_len
    2. FROM user_submit
    3. WHERE CHAR_LENGTH(nick_name) > 4
    4. ORDER BY device_id DESC

    SQL55 用户名规范化

    1. SELECT device_id, CONCAT(UCASE(SUBSTR(user_name, 1, 1)), LCASE(SUBSTR(user_name, 2))) AS user_name
    2. FROM (
    3. SELECT device_id, SUBSTRING_INDEX(blog_url, '/', -1) AS user_name
    4. FROM user_submit
    5. ) tmp
    6. ORDER BY device_id DESC

    SQL56 博客地址修复

    1. SELECT device_id, REGEXP_REPLACE(TRIM(blog_url), 'http:/([^/])', 'http://$1') AS blog_url
    2. FROM user_submit

    SQL57 最后一个匹配上的位置

    1. SELECT
    2. device_id,
    3. CHAR_LENGTH(nick_name) - CHAR_LENGTH(SUBSTRING_INDEX(nick_name, 'abc', -1)) - 2 AS last_idx,
    4. CONCAT('abc', SUBSTRING_INDEX(nick_name, 'abc', -1)) AS check_str
    5. FROM user_submit
    6. WHERE LOCATE('abc', nick_name) > 0
    7. ORDER BY device_id DESC

    SQL58 任意两个连续自然月练题次数大于1的用户

    1. WITH practice_per_month AS (
    2. SELECT device_id, DATE_FORMAT(event_date, '%Y%m') AS mth
    3. FROM question_practice_detail
    4. GROUP BY device_id, DATE_FORMAT(event_date, '%Y%m')
    5. HAVING COUNT(1) > 1
    6. )
    7. SELECT DISTINCT t1.device_id
    8. FROM practice_per_month AS t1 JOIN practice_per_month AS t2 ON t1.device_id = t2.device_id AND PERIOD_DIFF(t2.mth, t1.mth) = 1
    9. ORDER BY t1.device_id DESC

    SQL59 截至当月的练题情况

    1. WITH practice_stat AS (
    2. SELECT device_id, DATE_FORMAT(event_date, '%Y-%m') AS ym, COUNT(1) AS cnt
    3. FROM question_practice_detail
    4. GROUP BY device_id, DATE_FORMAT(event_date, '%Y-%m')
    5. )
    6. SELECT
    7. device_id,
    8. ym,
    9. SUM(cnt) OVER (PARTITION BY device_id ORDER BY ym) AS sum_cnt,
    10. ROUND(AVG(cnt) OVER (PARTITION BY device_id ORDER BY ym ROWS BETWEEN 2 PRECEDING AND CURRENT ROW), 2) AS avg3_cnt,
    11. SUM(cnt) OVER (ORDER BY ym) AS total_cnt
    12. FROM
    13. practice_stat
    14. ORDER BY
    15. device_id, ym
  • 相关阅读:
    python读取.xls文件,绘制钻头外径磨损图
    模拟卷Leetcode【普通】061. 旋转链表
    css:盒子模型
    【C++】运算符重载案例 - 字符串类 ② ( 重载 等号 = 运算符 | 重载 数组下标 [] 操作符 | 完整代码示例 )
    入门cv必读的10篇baseline论文
    Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
    MySQL的enum类型的踩坑记录
    详解字符串比较函数:strcmp函数及其模拟实现
    URL endoce 和 decode
    【好书推荐】JavaScript Es8 函数式编程实践入门
  • 原文地址:https://blog.csdn.net/liulizhi1996/article/details/127832740