SQL非技术快速入门39题

news2024/9/24 19:17:42

※食用指南:文章内容为牛客网《非技术快速入门》39道题重点笔记,用于重复思考错题,加深印象。

练习传送门:SQL非技术快速入门39题

目录:

SQL13 Where in 和Not in

SQL19 分组过滤练习题

SQL20 分组排序练习题

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

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

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

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

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

SQL30 统计每种性别的人数

SQL32 截取出年龄

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

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


SQL13 Where in 和Not in

❓找到学校为北大、复旦和山大的同学进行调研

非用运算符也可以,但太麻烦

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

WHERE university='北京大学' OR university='复旦大学' OR university='山东大学

SQL19 分组过滤练习题

平均发贴数低于5的学校或平均回帖数小于20的学校数值函数:ROUND取整
 

数值函数:ROUND取整:

 

聚合函数:使用HAVING子句,可以在分组行之后筛选数据

※WHERE在GROUP BY前筛选数据,HAVING在GROUP BY后筛选数据

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

SQL20 分组排序练习题

关键词“每”、“各”,可以判断结果集是需要进行分组

※谨记子句的顺序,GROUP BY永远在SELECTF、FROM后面,ORDER BY前面

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

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

❓每个学校答过题的用户平均答题数量情况

平均答题数量:总答题数量/总人数

DISTINCT:去除重复答题的用户

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

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

❓参加了答题的山东大学的用户在不同难度下的平均答题题目数

INNER JOIN——多表检索数据

SELECT  university,
        difficult_level,
        ROUND(COUNT(qpd.question_id)/
        COUNT(DISTINCT qpd.device_id),4) AS avg_answer_cnt
FROM user_profile u
INNER JOIN question_practice_detail qpd ON u.device_id = qpd.device_id
INNER JOIN question_detail qd ON qd.question_id = qpd.question_id
WHERE u.university='山东大学'
GROUP BY qd.difficult_level

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

❓分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,结果不去重

结果不去重 UNION ALL,去重UNION

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'

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

❓将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况

IF函数:只允许单一的测试表达式

CASE函数:可以针对每个测试表达式返回不同值

可以选择性加上ELSE子句,如果以上的条件没有一个真,则返回后面输入的条件Future

最后需要用END关键字关闭CASE语句块

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

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

❓用户在某天刷题后第二天还会再来刷题的平均概率

DATE_ADD:给日期时间值添加日期成分

在当前日期时间上增加一天

第一个参数传递当前日期时间,第二个参数写一段表达式(INTERVAL 1 DAY)

次日留存率可以这样表示:

次日留存率=去重的数据表中符合次日留存的条目数目/

去重的数据表中所有条目数目

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

SQL30 统计每种性别的人数

❓统计每个性别的用户分别有多少参赛者

SELECT  CASE WHEN profile LIKE '%female' THEN 'female'
            ELSE 'male'
            END AS gender,
        COUNT(*) number
FROM user_submit
GROUP BY gender

SQL32 截取出年龄

❓统计每个年龄的用户分别有多少参赛者

数值函数:SUBSTR (SUBSTRING,字符截取函数):一个字符串中任何位置的字符

第二个参数时起始位置,第三个参数是长度

 

第三个参数如果不写,返回起始位置算到字符串最后的所有字符

 

SUBSTRING_INDEX(()函数:用来截取字符串

例子:165cm,45kg,26,female

①SUBSTRING_INDEX(profile,',',3)

正数,从左往右算第三个逗号,获取到165cm,45kg,26

②SUBSTRING_INDEX(SUBSTRING_INDEX(profile,',',3),',',-1)

负数,从右往左算第一个逗号,获取到26

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

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

❓找到每个学校gpa最低的同学

⚠gpa最低,看似MIN(gpa),但是是每个学校里的最低,不是全部最低

MIN(gpa)无法对应device_id,也就无法获取到最低gpa对应device_id

窗口函数:

RANK:用来记录排序的函数

PARTITION BY:设定排序的对象范围(根据什么分组)

ORDER BY:指定哪一列、何种顺序排序(默认升序,降序DECS)

例如:根据不同种类(product_type),按照销售单价(sale_price)从低到高排序

PARTITION BY横向对表进行分组;ORDER BY决定纵向排序的规则

RANK() OVER (PARTITION BY university ORDER BY gpa) AS ranking 

找最大最小值对应数据的其他字段信息,联系窗口函数取where up.ranking=1

SELECT  device_id, 
        university,
        gpa 
FROM (SELECT device_id,
             university,
             gpa, 
     RANK() OVER (PARTITION BY university ORDER BY gpa) AS ranking 
     FROM user_profile) up
WHERE up.ranking=1;

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

❓复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,对于在8月份没有练习过的用户,答题数结果返回0

COUNT计数非空个数,SUM只求和;

如果这里要用COUNT:COUNT(IF(qpd.result='right', 1, NULL))

USING只能用于列名称完全一致的数据

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

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

❓浙江大学的用户在不同难度题目下答题的正确率情况

AVG、SUM、COUNT三种方法都可获得正确率

SELECT  difficult_level,
        AVG(IF(result='right',1,0)) AS correct_rate
        
        #SUM(IF(q.result='right', 1, 0)) /
        COUNT(q.question_id) AS correct_rate
        
        #COUNT(IF(qpd.result='right', 1, NULL)) /
        COUNT(q.question_id) AS correct_rate
FROM user_profile u
INNER JOIN question_practice_detail q USING(device_id)
INNER JOIN question_detail qd USING(question_id)
WHERE u.university='浙江大学'
GROUP BY difficult_level
ORDER BY correct_rate


————END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053444.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DDPM | 扩散模型代码详解【较为详细细致!!!】

文章目录 1、UNet网络结构1.1 residual网络和attention网络的细节1.2 t 的作用1.3 DDPM 中的 Positional Embedding 的使用1.4 DDPM 中的 Positional Embedding 代码1.5 residual block1.6 attention block1.7 UNet结构 2、命令行参数解析3、数据的获取与预处理4、模型的训练框…

stm32的UART重定向printf()

1配置好uart 2打开usart.c文件 3在此文件前面添加头文件 4在末尾添加重定向代码 添加的代码 /* USER CODE BEGIN 1 *///加入以下代码,支持printf函数,而不需要选择use MicroLIB //#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #if 1 //#pragma import(__use_n…

microsoft edge怎么关闭安全搜索

microsoft edge浏览器为用户提供了安全搜索功能&#xff0c;旨在帮助用户过滤掉搜索结果中出现的不当信息。然而&#xff0c;有些用户可能觉得安全搜索功能限制了他们的浏览体验或工作需求。下面就给大家带来关闭microsoft edge安全搜索的相关内容&#xff0c;一起来看看吧。&a…

java 函数接口Consumer简介与示例【函数式编程】【Stream】

Java 8 中的 消费者接口Consumer 是一个函数接口&#xff0c;它可以接受一个泛型 类型参数&#xff0c;它属于java.util.function包。 accept(T) 方法&#xff1a;是 Consumer 函数式接口的方法&#xff0c;传入单个输入参数&#xff0c;无返回值&#xff0c;可以用于 Lambda 表…

日本央行还会加息?机构与市场唱反调!

最近&#xff0c;关于日本央行是否会继续加息的话题引发了市场热议。一边是市场对加息预期大幅下降&#xff0c;另一边却有像先锋、M&G这样的国际知名资产管理公司坚定地看好日本央行的进一步紧缩。 这究竟是怎么回事呢&#xff1f; 市场与机构的观点分歧 市场看跌加息&am…

如何通过社交媒体有效促进口碑营销?

在一个广告无处不在的时代&#xff0c;大多数品牌不能再盲目的选择传统的广告轰炸&#xff0c;而应依靠口碑营销&#xff0c;通过消费者的自发传播实现了品牌的快速崛起。 口碑营销的几个关键的传播要素&#xff1a; 真实性&#xff1a;在广告反感的时代&#xff0c;消费者更倾…

Java常用API第二篇

正则表达式&#xff1a; 正则表达式&#xff08;简称 regex&#xff09;是用来描述字符串模式的工具&#xff0c;常用于字符串的查找、匹配、替换等操作。它在文本处理、数据验证、以及编程中非常常见。以下是正则表达式的基本知识点&#xff1a; 1. 正则表达式的基础符号 . (…

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署

【Datawhale AI夏令营第四期】 魔搭-大模型应用开发方向笔记 Task04 RAG模型 人话八股文Bakwaan_Buddy项目创空间部署 什么是RAG&#xff1a; 我能把这个过程理解为Kimi.ai每次都能列出的一大堆网页参考资料吗&#xff1f;Kimi学了这些资料以后&#xff0c;根据这里面的信息综…

期权有指定的交易场所吗?

在当前的金融市场环境下&#xff0c;设立专门的股票期权交易所&#xff0c;比如上交所&#xff0c;深交所和中金所&#xff0c;都是国内出门的交易场所&#xff0c;不过期权交易都是在券商和期货开通账户买卖&#xff0c;但这并不妨碍投资者通过其他途径参与期权投资&#xff0…

DHCP原理及实验

目录 1.基础知识 &#xff08;1&#xff09;基本概念 &#xff08;2&#xff09;DHCP优点 2.工作原理 3.私接路由器解决方法 4.实验搭建 &#xff08;1&#xff09;实验top &#xff08;2&#xff09;实验概述 5.配置命令 &#xff08;1&#xff09;基础配置 &#…

音境剧场:开启声学体验的全新纪元—轻空间

在现代建筑和空间设计中&#xff0c;声学环境越来越受到重视。一个好的声学空间&#xff0c;不仅能提升使用者的感受&#xff0c;还能为各种活动提供最优质的音效体验。作为创新声学空间的代表作&#xff0c;“音境剧场”应运而生&#xff0c;它不仅是一个多功能场馆&#xff0…

FunHPC算力平台评测

作为内测老用户&#xff0c;已经用DeepLn平台&#xff08;现改名为FunHPC平台&#xff09;好久了&#xff0c;一路见证了平台从最初100多人的小群到现在满群的状态&#xff0c;FunHpc平台确实在一步步的走向成熟&#xff0c;一步步的变大。趁着现在活动的时间&#xff0c;发篇文…

ant design pro 中用户的表单如何控制多个角色

ant design pro 如何去保存颜色ant design pro v6 如何做好角色管理ant design 的 tree 如何作为角色中的权限选择之一ant design 的 tree 如何作为角色中的权限选择之二ant design pro access.ts 是如何控制多角色的权限的 看上面的图片 当创建或编辑一个用户时&#xff0c;…

vue3里面的组件实例类型(包括原生的html标签类型)

在 通过 ref&#xff08;null&#xff09;获取组件的时候&#xff0c;我们想要为 组件标注组件类型&#xff0c;可以通过 any 类型来进行标注&#xff0c;但是很明显&#xff0c;这些的代码很不优雅&#xff0c;所以我们可以利用 vue3 里面的 InstanceType 来进行类型标注 这是…

基于STM32开发的智能窗帘控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化光照检测与窗帘控制手动控制与状态指示Wi-Fi通信与远程控制应用场景 家庭智能窗帘办公室环境控制常见问题及解决方案 常见问题解决方案结论 1. 引言 智能窗帘控制系统通过集成光照…

去中心的投票平台

项目介绍&#xff1a; 前端&#xff1a; vue3vant4 工具&#xff1a; vscode和vant在线平台&#xff1a;Vant - Mobile UI Components 交互&#xff1a; Web3.js库 工具&#xff1a;小狐狸钱包&#xff08;MetaMask&#xff09; 后端&#xff1a; solisity 工具&#xff1…

Java并发必杀技!线程池让你的程序速度飙升不止一点点!

文章目录 1 线程池的工作机制是什么&#xff1f;2 线程池的任务出现异常该怎么解决&#xff1f;3 线程池的内存泄露该如何解决&#xff1f; 近期迷上了举例子来结合知识点学习&#xff0c;尽量减少枯燥&#xff0c;如有错见谅哈~ 1 线程池的工作机制是什么&#xff1f; 线程池…

登录方式(c语言)

1.//描述 //有个软件系统登录的用户名和密码为&#xff08;用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin&#xff09;&#xff0c;用户输入用户名和密码&#xff0c;判断是否登录成功。 //输入描述&#xff1a; //多组测试数据&#xff0c;每行有两个用空格分开的…

Java语言程序设计——篇十五(1)

&#x1f33f;&#x1f33f;&#x1f33f;跟随博主脚步&#xff0c;从这里开始→博主主页&#x1f33f;&#x1f33f;&#x1f33f; 欢迎大家&#xff1a;这里是我的学习笔记、总结知识的地方&#xff0c;喜欢的话请三连&#xff0c;有问题可以私信&#x1f333;&#x1f333;&…

K8s节点状态 NotReady排查

k8s节点由 Ready变成 NotReady izbp12ghzy6koox6fqt0suz NotReady slave 97d v1.23.3 izbp12ghzy6koox6fqt0svz Ready control-plane,master 98d v1.23.3节点进入 NotReady 状态可能是由于多种原因引起的&#xff0c;尤其是在资源过量分配&am…