select count(*) from返回的类型_数据分析面试题类型汇总

1 简单查询

- 基本的查询语句:select <列名> from 表名 where 条件- where 后的条件需要标量,不可以使用集合,若与关联子查询连用可用;
可使用逻辑运算符连接多个条件:between、and、or、in()、not(不常用)- 模糊条件查询like,常用于where后,“%”表示不定长度的字符串,“_”表示一个字符
  • 已知首字符查询,where 姓名 like '猴%'
  • 已知末尾字符查询,where 姓名 like '%猴'
  • 已知数据中的部分字符查询,where 姓名 like '%猴%'

2 汇总分析

2.1 汇总

- sum、avg、max、min等函数可用在select,新增查询列,根据函数对列数据计算,并
且通过“as”语句对查询列命名。
- 计数汇总时,注意去重(distinct),count、distinct经常连用:
count(distinct <列名>)。

1)查询课程编号为“0002”的总成绩

  • 查询条件是课程号=“0002”,总成绩:sum(成绩)
select 

2)查询选了课程的学生人数

  • 选了课程的学生:score表,所有学生数量(表中每个学生都有选课,课程号无空值)
  • 学生人数:score表,学生会选择多个课程,使用distinct避免重复,count计数,即count(distinct 学号)
select 

2.2 分组

- 对数据分组使用:group by <列名>
- 看到“各(课)”,“每(门)”考虑使用分组
- 分组后要显示汇总结果,不能在select输入“*”

1)查询各科成绩最高和最低的分

  • 各科成绩:score表,按照课程号分组
  • 最高分:分组中成绩最大值;最低分:分组中成绩最小值
select 

2)查询每门课程被选修的学生数

  • 每门课程:score表,按课程号分组;
  • 课程被选修的学生数:一个课程有多少学生选择,计算分组内学生数量,count(学号)
select 

3)查询男生、女生人数

  • student表,按照性别分组,分别对每个组(性别)的学号计数
select 

2.3 分组结果的条件

- 使用 having 语句,用在 group by 之后:
group by <列名> having 对结果设定的条件- having 后的条件可以用汇总函数

1)查询平均成绩大于60分学生的学号

  • 学生平均成绩:按照学号分组,
  • 分组结果条件:分组平均成绩大于60分
select 

2)查询至少选修两门课程的学生学号

  • 至少选修两门课程:按照学生(学号)分组,count汇总每个学生选课数量,数量大于等于2
select 

3)查询同名同姓学生名单并统计同名人数

  • 同名同姓同学:按学生姓名分组
  • 统计同名人数:分组后统计组内人数,即同一个姓名的人数,人数>=2表示有同姓名
select 

2.4 排序

- order by <列名> desc/asc,desc降序,asc升序
- 当对多个字段排序时,按先后顺序录入,使用英文逗号分隔“,”
- limit <数字>,对排序后的结果,显示前几行
- 语句运行顺序,①from…where…group by…(having…) ②select ③order by 排序最后

1)查询不及格的课程并按课程号从大到小排列

  • 不及格课程:成绩<60
  • 课程号从大到小排列:按课程号降序排列
select 

2)查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列

  • 每门课程平均成绩:按课程分组,求每组成绩的平均值
  • 排序方式:先按平均成绩升序,再按课程号降序
select 

3)检索课程编号为“0004”且分数小于60的学生学号,结果按分数降序排列

  • 课程编号为“0004”:where 课程号 = '0004'
  • 分数小于60:成绩 < 60
  • 排序:按成绩降序排列
select 

4)统计每门课程的学生选修人数(超过2人的课程才统计),输出课程号和选修人数,按人数降序排列,若人数相同,按课程号升序排列

  • 每门课程的学生选修人数:按照课程号分组,对学号计数,人数>2
  • 排序方式:先按选课人数降序,再按课程号升序
select 

5)查询两门以上不及格课程的同学的学号,以及不及格课程的平均值

  • 两门以上、不及格课程的同学:按学号分组(group by),并且筛选不及格(成绩<60)的科目(where);对分组、筛选后的科目成绩计数(count),科目计数的数量>2
    整理顺序:筛选不及格成绩 - 按学号分组 - 对不及格成绩计数 - 求不及格平均成绩
  • 不及格课程的平均值:对分组后的数据查询平均值
select 

3 复杂查询

子查询——返回多行值
- 通过一个表中的数据调取另一个表的数据;
- in与子查询连用,举例:where 学号 in 符合条件的学号
标量子查询——返回单一值
关联子查询——返回同一组符合条件的一个值
where a.学号 = b.学号

1)分组取每组小于某个值的数据
案例:查询所有课程成绩小于60分学生的学号、姓名

  • 查询结果:学生学号、姓名;查询表:student;查询条件:符合条件的学号
  • 子查询:对应“符合条件的学号”,where 学号 in 符合条件的学号;
    条件分析:所有课程成绩<60的学生,即一个学生选的课程数<60,找到符合条件的所有学生;
    查询结果:学号;查询表:score;分组:按学号分组;分组结果条件:学生选的课程数<60。
select 

2)分组取每个组个数不完整的组名
案例:查询没有学全所有课的学生的学号和姓名

  • 查询结果:学生的学号、姓名;查询表:student;查询条件:符合条件的学号
  • 子查询1:对应“符合条件的学号”,where 学号 in 符合条件的学号;
    条件分析:没有选全所有课程的学生,学生选的课程数<所有的课程数;
    查询结果:学号;查询表:score;分组:按学生分组;分组结果条件:学生选的课程数<所有课程数;
  • 子查询2:对应“所有课程数”,是标量子查询
    查询结果:课程数量;查询表:course
select 

3)分组取每组个数等于定值的组名
案例:查询出只选修了两门课程的全部学生的学号和姓名

  • 查询结果:学号、姓名;查询表:student;查询条件:where 学号 in 符合条件的学号
  • 子查询:对应符合条件的学号,条件:只选修了两门课程
    查询结果:学号;查询表:score;分组:按学生分组;分组结果条件:学生选课数=2
select 

4)日期转换
案例:1990年出生的学生名单

  • 查询结果:学号、姓名;查询表格:student;查询条件:出生年=1990,表格中是出生日期,将出生日期使用 year() 得到出生年份
select 

TopN问题

分组取每组最大值、最小值,每组最大的N条记录。
例如:每个类别下用户最喜欢的产品是哪个?每个类别下用户点击最多的5个商品是什么?

5)分组取每组最大值
案例:按课程号分组取成绩最大值所在行的数据

  • 查询结果:所有字段;查询表:score as a ;条件:按课程号分组,成绩=每组成绩的最大值
  • 每组成绩最大值:
    查询结果:max(成绩);查询表:score as b ;条件:a的课程号=b的课程号,
select 

6)分组取每组最小值
案例:按课程号分组取成绩最小值所在行的数据

select 

7)每组最大的N条记录
案例:查询各科成绩前两名记录

表格与自己表格建立联结,联结方式除了关系相等,还有其他限定条件
SELECT 

v2-cedb95118a9a13da3c52f060b2c16e5d_b.jpg
思考过程

4 多表查询

v2-0cfdcf6e3125c4e964d2da639b7f35d6_b.jpg
多表联结
inner/left/right/full join on 关系条件
- inner join 不符合关联条件的部分不选择
- left join / right join 保留左/右数据,另一个表不符合关联条件的部分为null
case 表达式
case when 条件 then 结果1 else 结果2 end
常与select连用,新增查询列

1)在表A,不在表B的数据
案例:不是近视眼的学生有谁?

v2-7736ed4d40d4df3e61eaa82c9e5bb78b_b.jpg
select 

2)联结表B,查询表A
案例:查询所有学生的学号、姓名、选课数、总成绩

select 

3)条件筛选表B,查询表A
案例:查询平均成绩大于85的所有学生的学号、姓名和平均成绩

select 

4)三表联结
案例:查询学生选课情况:学号、姓名、课程号、课程姓名

select 

5)分组条件汇总(case表达式)
案例:查询每门课程的及格人数和不及格人数

select 

6)表联结+分组条件汇总(case表达式、XX join)
案例:使用分段[100-85],[85-70],[70-60],[‹60]来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

select 

7)多条件表联结
案例:查询课程编号为0003且课程成绩在80分以上的学生的学号和姓名

select 

8)行列互换
案例:将下表1转换为表2

v2-119504bec279f6d1fac71a4f91015308_b.jpg
表1

v2-80ea9f32bd95dbf0716924d55b2673d3_b.jpg
表2
select 

v2-53ad03b241ed42f0cc551f32cf19cff1_b.jpg

5 提高SQL查询效率

写sql时要注意尽量减少全表搜索操作,从而提高查询效率:

1)select 子句中,尽量避免使用“*”,只提取需要的列

2)where 子句,比较符左侧避免函数,统一转移到右边实现

举例:where 成绩 + 5 › 90  (表达式在比较符号的左侧)优化成:where 成绩 › 90 – 5(表达式在比较符号的右侧)

3)尽量避免使用in、not in,in可使用 between…and 替换

举例:查看第8、9个人的学号和成绩where 学号 in (8, 9)      优化成:where 学号 between 8 and 9

4)尽量避免使用 or ,可用union替换

从成绩表中选出成绩是是88分或89分学生的学号:
select 学号 
from 成绩表 
where 成绩 = 88 or 成绩 = 89优化后:
select 学号 from 成绩表 where 成绩 = 88
union
select 学号 from 成绩表 where 成绩 = 89

5)使用limit子句限制返回的数据行数

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

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

相关文章

configurationproperties_【Springboot】注解@ConfigurationProperties让配置整齐而简单

1 简介前面我们用一篇文章《【Spring】只想用一篇文章记录Value的使用&#xff0c;不想再找其它了(附思维导图)》详细讲解了在Spring中如何使用Value来实现我们对配置的需求&#xff0c;它功能强大、使用方便。但它也是有它的局限性的&#xff0c;比如对于邮件服务&#xff0c;…

dmo Java_java DMO及增删改查代码的自动生成

在web开发过程中&#xff0c;尤其是后台管理系统的开发中&#xff0c;少不了增删改成的基础操作&#xff0c;原来我自己的做法是一份一份的拷贝粘贴&#xff0c;然后修改其中的不同&#xff0c;然而这样既枯燥无味又浪费了大量的时间&#xff0c;所以根据自己项目结构的特点写了…

if __name__ == __main___一文带你弄懂python中if __name__ == #39;__main__#39;

我们在python模块那章节的学习&#xff0c;有所接触到if __name__ __main__这个概念。当时我们只是大概描述了一番&#xff0c;不少伙伴还是有所困惑&#xff0c;今天就让我们通过实际例子去讲解这条语句到底有何含义。一个python文件有两种用途&#xff0c;一种被当主程序、脚…

java 生成apk包_Eclipse导出安卓apk文件的图文教程

安装到Android手机上的apk需要签名&#xff0c;本文描述了如何创建自己的签名及从Eclipse中导出apk。方法/步骤1、在Eclipse中选择一个Android工程&#xff0c;然后点击鼠标右键菜单中的“Export”&#xff1a;2、选择“Android”->;“Export Android Application”&#xf…

营业执照在线生成_平罗县实现个体户营业执照“秒批”

近日平罗县市场监管局注册登记窗口推出个体工商户“秒批”系统。今后&#xff0c;75%个体户常见经营项目可实现5分钟内乃至数秒无人工干预智能审批。01 一是实现智能化审批。平罗县市场监管局登记注册窗口依托自治区系统升级改造&#xff0c;推行企业设立登记标准化和智能化。…

wireshark-win64-3.4.0安装_轴承安装规范

Sulli小苏&#xff1a;今天详细介绍下如何正确的安装轴承&#xff0c;正确的安装操作是轴承长寿命的关键&#xff0c;轮毂轴承的主要作用是承重和为轮毂的转动提供精确引导&#xff0c;它既承受轴向载荷又承受径向载荷&#xff0c;是一个非常重要的零部件。轴承的安装正确方式滚…

代码实现tan graph model for classification_几行代码搞定ML模型,低代码机器学习Python库正式开源...

PyCaret 库支持在「低代码」环境中训练和部署有监督以及无监督的机器学习模型&#xff0c;提升机器学习实验的效率。想提高机器学习实验的效率&#xff0c;把更多精力放在解决业务问题而不是写代码上&#xff1f;低代码平台或许是个不错的选择。最近&#xff0c;机器之心发现了…

dataframe 如何选中某列的一行_带你领略pandas中多表之间如何处理

但我们在处理Pandas多表数据时,我们需要将多个表之间进行表格的连接与合并,当连接完多表之后我们可能还需要对数据进行多重的索引,方便我们更快的找到数据,以及对数据进行做透视表,更加直观的去观察我们的数据,今天我们就围绕着数据合并以及数据重塑及透视表进行展开讲解,让我们…

python计算定积分_python编程通过蒙特卡洛法计算定积分详解

这篇文章主要介绍了python编程通过蒙特卡洛法计算定积分详解&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。 想当初&#xff0c;考研的时候要是知道有这么个好东西&#xff0c;计算定积分。。。开玩笑&#xff0c;那时候计算定积分根本没有这么简单的。但这确…

java spring mvc api_SpringMVC实现REST API

JSON使用Jackson jar包、RequestBody、ResponseBody注解&#xff0c;达到&#xff1a;1. 请求JSON消息体映射为JAVA对象2. 返回JAVA对象映射为JSON消息体Step 1. 导入Jackson jar包&#xff1a;Step 2. 在Spring MVC配置中加入annotation-driven&#xff0c;该配置可以确保Requ…

gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了

前言当我们的网关Gateway程序开发完成之后&#xff0c;需要部署到生产环境&#xff0c;这个时候你的程序不能是单点运行的&#xff0c;肯定是多节点启动(独立部署或者docker等容器部署)&#xff0c;防止单节点故障导致整个服务不能访问&#xff0c;网关是对客户端的入口与出口&…

json里面的list数据取不出来_sql盲注的困局:利用DNSlog快速导出数据

对于一个sql注入点来说最幸运的就是支持堆叠注入&#xff0c;最蛋疼的就是盲注&#xff0c;盲注里面难搞的就是基于时间的盲注。我们在本地利用这段代码进行演示<?php error_reporting(0); $link mysqli_connect(localhost,root,root); mysqli_set_charset($link,utf8); m…

python怎么测试程序_python如何测试程序

测试函数是用于自动化测试&#xff0c;使用python模块中的unittest中的工具来测试 附上书中摘抄来的代码&#xff1a;#codingutf-8 import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): f…

判定覆盖白盒测试java_白盒测试系列(四)条件判定覆盖

条件判定覆盖一、定义&#xff1a;程序中每个判定至少有一次为真值&#xff0c;有一次为假值,使得程序中每个分支至少执行一次&#xff0c;且使得各判定中的每个条件获得各种可能的取值至少满足一次。二、特点&#xff1a;1、综合了条件覆盖和判定覆盖的特点2、满足条件判定覆盖…

discard python_Netty入门教程(一) 实现DISCARD服务

官方那个给出的介绍是&#xff1a;Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可靠性的网络服务器和客户端程序。然后我们简单理解一下&#xff0c;这玩意就是个程序&#xff0c;干什么的&am…

python向量化编程技巧_神经网络基础之Python与向量化

Vectorization 深度学习算法中&#xff0c;数据量很大&#xff0c;在程序中尽量减少使用loop循环语句&#xff0c;而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用矩阵运算的思想&#xff0c;大大提高运算速度。例如下面所示在Python中使用向量化要比使…

SQL server 数据库面试题及答案(实操2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…

python电子相册制作软件_电子相册怎么做

电子相册制作 本文来自#千兆网络有什么用#征稿活动&#xff0c;不断提速的网络给你的生活带来了什么变化&#xff1f;快来参与活动&#xff0c;聊聊你玩转互联网&#xff0c;高速网上冲浪的经历&#xff01;>点击这里查看活动详情< 现在手机的拍照功能日趋强大&#xff0…

java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)

印象中循环删除list中的元素使用for循环的方式是有问题的&#xff0c;但是可以使用增强的for循环&#xff0c;然后今天在使用时发现报错了&#xff0c;然后去科普了一下&#xff0c;再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。JAVA中循环遍历…

python reduce函数_Python reduce()函数的用法小结

reduce()函数也是Python内置的一个高阶函数。 reduce() 格式&#xff1a; reduce (func, seq[, init()]) reduce()函数即为化简函数&#xff0c;它的执行过程为&#xff1a;每一次迭代&#xff0c;都将上一次的迭代结果&#xff08;注&#xff1a;第一次为init元素&#xff0c;…