SQL 条件函数 日期函数 文本函数 窗口函数

news/2024/5/1 12:32:54/文章来源:https://blog.csdn.net/weixiwo/article/details/130136315

玩了几天,劳逸结合,继续复习刷题sql

一、条件函数

1.题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量(age为null 也记为 25岁以下

user_profile

 期望结果:

 涉及知识:

需要使用case函数,case函数是一种分支函数,可以根据条件表达式返回多个可能的结果中的一个。可用在人任何允许使用表达式的地方,当不能单独使用一个语句执行。

简单case函数

计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个where子句的简单表达式进行比较。如果某个简单表达式的值与测试表达式的值相等,则返回第一个匹配的when子句,如果所有表达式的值与测试表达式的值都不相等,若指定了else子句,则返回else子句中指定结果的值,若没有指定else子句,则返回NULL

搜索case函数

按上到下的书写顺序计算每个when子句的布尔表达式。返回第一个取值为true的布尔表达式所对应的结果表达式的值。如果没有取值为true的布尔表达式,且当指定了else子句时,返回else子句指定的结果,如果没有指定else子句,则返回null

SELECT CASE WHEN age < 25 OR age IS NULL THEN '25岁以下' WHEN age >= 25 THEN '25岁及以上'END age_cut,COUNT(*)number
FROM user_profile
GROUP BY age_cut
selectif (age >= 25, "25岁以上", "25岁以下") AS age_cut,count(*) as number
fromuser_profile
group byage_cut;

二、日期函数

1.题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。

question_practice_detail

期望结果:

 

 涉及知识:

由于涉及到时间,可以直接使用day() month() year()函数,由于是计算八月每天练题数,所以需要按照date时间分隔,由于具体指定了月份可以使用where

selectday(date) day,count(question_id) question_cnt
fromquestion_practice_detail
wheremonth(date) = 8and year(date) = 2021
group bydate

三、文本函数

1.题目:统计每种性别的人数

user_submit

期望结果:

 涉及知识:

可以使用substring_index(str,delim,count) 

        str:要处理的字符串

        delim:分隔符

        count:计数

count如果为正数,则从左到右,第n个分隔符的左边全部内容。如果count为负数,则从右往左数,第n个分隔符的右边所有内容。

例子:str=www.baidu.com

sunstring_index(str,' . ',1)

        结果:www

sunstring_index(str,' . ',-2)

        结果:baidu.com

selectsubstring_index (profile, ',', -1) gender,count(*) number
fromuser_submit
group bygender

使用substring_index来截取最后一个字段,性别 gender,然后统计gender的数量,最后再根据gender分组

涉及知识:

可以使用like函数进行模糊匹配 %表示占位符,再使用if进行判断,如果profile字段中含有female字段,则为female,否则为male 表示为gender,再用count统计数量。因为需要统计每种性别的人数,所以使用gender来分组。

selectif (profile like '%female', 'female', 'male') gender,count(*) number
fromuser_submit
group bygender

 四、窗口函数

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。

期望结果:

  首先可以先获取每个学校最低gpa,可以使用min函数和group分组,分别得到每个学校最低的gpa

 解法1:由于还需要获取device_id,所以需要再获取其中的值。再用where字段 和(university和gpa)

selectdevice_id,university,gpa
fromuser_profile
where(university, gpa) in (selectuniversity,min(gap)fromuser_profilegroup byuniversity)
order byuniversity

解法2:

涉及知识:

窗口函数涉及到组内排名需要涉及到sql的高级功能窗口函数。窗口函数也叫OLAP函数

窗口函数的基本语法:

<窗口函数> over (partition by <用于分组的列名>order by <用于排序的列名>)

窗口函数可以放两种函数:

1. 专用窗口函数:rank,dense_rank,row_number专用窗口函数

2. 聚合函数,sum,avg,max,min等

因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。

        partion by用来对表分组

        order by子句是对于分组后的结果进行排序

之前已经有group by的子句分组功能,为什么还需要窗口函数。

        group by分组汇总后改变了表的行数,一行一个类别。而partion函数不会减少原表的行数。

其他窗口函数:

        rank,dense_rank,row_number区别?

select *,rank() over (order by 成绩 desc) as ranking,dense_rank() over (order by 成绩 desc) as dese_rank,row_number() over (order by 成绩 desc) as row_num
from 班级表

 rank函数:为5位、5位、5位、8位,也就是如果有并列名次的行,会占用下一名次的位置。

dense_rank:为5位、5位、5位、6位,如果有并列名次,不占用下一名次位置。

row_num函数:为5位、6位、7位、8位,就是不考虑并列名次的情况。

题解:

首先使用row_num函数进行排序,以学校为分组,然后以学校分组进行排名,再用where筛选需要的名次

select*,row_number() over (partition byuniversityorder bygpa) as rn
fromuser_profile

 由于题目要求最后需要按照学校排名,所以最后使用oder by,因为是使用最后一名,所以使用cn排名为1的,因为排序默认为升序。

selectdevice_id,university,gpa
from(select*,row_number() over (partition byuniversityorder bygpa) as rnfromuser_profile) as univ_min
wherern = 1
order byuniversity;

 

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

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

相关文章

由浅入深掌握Python多线程原理与编程步骤

由浅入深掌握Python多线程编程一、 Python多线程编程原理1. 什么是线程2. 线程工作原理3. Python全局锁与线程关系4. Python 支持多线程的模块二、由简单的示例初步了解多线程编程步骤三、标准库 threading 模块介绍1. threading 模块的主要属性、方法&#xff0c;以及公共函数…

C++ [图论算法详解] 欧拉路欧拉回路

蒟蒻还在上课&#xff0c;所以文章更新的实在慢了点 那今天就来写一篇这周刚学的欧拉路和欧拉回路吧 讲故事环节&#xff1a; 在 一个风雪交加的夜晚 18世纪初普鲁士的哥尼斯堡&#xff0c;有一条河穿过&#xff0c;河上有两个小岛&#xff0c;有七座桥把两个岛与河岸联系…

Python手写板 画图板 签名工具

程序示例精选 Python手写板 画图板 签名工具 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Python手写板 画图板 签名工具>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

Diffusion模型系列文章

DDPM 论文 扩散模型包括两个过程&#xff1a;前向过程&#xff08;forward process&#xff09;和反向过程&#xff08;reverse process&#xff09;&#xff0c;其中前向过程又称为扩散过程&#xff08;diffusion process&#xff09;&#xff0c;如下图所示&#xff0c;从x…

如何定位Spark数据倾斜问题,解决方案

文章目录前言一、数据倾斜和数据过量二、 数据倾斜的表现三、定位数据倾斜问题定位思路&#xff1a;查看任务-》查看Stage-》查看代码四、7种典型的数据倾斜场景解决方案一&#xff1a;聚合元数据解决方案二&#xff1a;过滤导致倾斜的key解决方案三&#xff1a;提高shuffle操作…

1.docker-安装及使用

1.安装步骤 Install Docker Engine on CentOS 1. 确定CenOS7及以上版本 cat /etc/redhat-release2.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3.yum安…

Spimes x5.0主题模板全开源源码/Typecho主题模板

☑️ 品牌&#xff1a;Typecho ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;主题模板 ☑️ 支持&#xff1a;PCWAP &#x1f389;有需要的朋友记得关赞评&#xff0c;底部分享获取&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 Spimes x5.0主题模板全开…

基于overleaf 的美国大学生数学建模竞赛(美赛)latex 格式模板(含信件和附件)

可能是最后一次打美赛了&#xff0c;感觉有的东西不整理整理有点对不起自己的经历。感觉为这个比赛付出过挺多的&#xff0c;这几次参赛的经历也从各种方面提升了我的能力&#xff0c;相信未来的自己也还会怀念这段时光。 个人认为美赛的难点之一就是优质资源难得&#xff0c;…

Pytorch深度学习笔记(三)线性模型

目录 1.机械学习的过程 2.线性模型 1.机械学习的过程 机械学习的过程&#xff1a; 1.准备数据集DataSet——>2.选择模型Model——>3.训练Training——>4.推理Infering 监督学习&#xff1a;用已知标签的训练样本训练模型&#xff0c;用来预测未来输入样本的标签&#…

Android---内存泄漏检测核心原理

目录 LeakCanary 核心原理 LeakCanary 检测对象的类型 ReferenceQueue 与 WeakReference LeakCanary 里的监控列表与保留列表 常见内存泄漏案例 1. 单例导致内存泄漏 2. 静态变量导致内存泄漏 3. 非静态内部类导致内存泄漏 4. 未取消注册或回调导致内存泄漏 5. Timer…

ChatGPT的发展对客户支持能提供什么帮助?

多数组织认为客户服务是一种开销&#xff0c;实际上还可以将客户服务看成是一种机会。它可以让你在销售后继续推动客户的价值。成功的企业深知&#xff0c;客户服务不仅可以留住客户&#xff0c;还可以增加企业收入。客户服务是被低估的手段&#xff0c;它可以通过推荐、见证和…

AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比

本篇的目的是生成一个虚拟的女生形象。先进入正题说明人像怎么生成,本篇使用到的工具和工具的介绍放在文末。 先来一波Midjourney生成的美图提升下大家学习的欲望 以上四张图使用的是相同的Prompt,如下: a beautiful chinese girl, 18 years old, detailed and big eye…

【c++初阶】命名空间的定义

命名空间的定义一.缺陷二.namespace和::三.访问namespace四.一些注意1.工程里标准库的展开2.命名域的小技巧一.缺陷 在c语言中&#xff0c;如果我们同时定义一个全局变量和一个局部变量并且使用同一个名称的话&#xff0c;是可以编过的&#xff08;因为全局和局部是属于两个不同…

算法训练Day25:216.组合总和III ,17.电话号码的字母组合

文章目录[组合总和 III](https://leetcode.cn/problems/combination-sum-iii/description/)题解电话号码的字母组合题解组合总和 III CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (71.84%)6570--0 TagsCompanies 找出所有相加之和为 n 的 …

分子生物学 第五章 DNA损伤修复和突变

文章目录第五章 DNA损伤修复和突变第一节第二节 DNA损伤的类型1 造成DNA损伤的因素2 DNA损伤的类型3 DNA损伤修复机制3.1 直接修复3.2 切除修复3.3 双链断裂修复3.4 重组修复3.5 跨越合成第五章 DNA损伤修复和突变 第一节 损伤&#xff1a;比如碱基&#xff0c;甲基化 突变&…

JavaWeb——锁策略, cas和synchronized优化过程

目录 一、锁策略 1、悲观锁和乐观锁 2、轻量级锁和重量级锁 3、自旋锁和挂起等待锁 4、互斥锁和读写锁 5、可重入锁和不可重入锁 6、公平锁和非公平锁 二、cas和synchronized 优化过程 1、CAS&#xff08;compare and swap&#xff09; &#xff08;1&#xff09;、原…

路由器的两种工作模式及快速通过express搭建微型服务器流程,解决刷新页面服务端404的问题

history模式与hash模式 首先这个#叫做hash&#xff0c;最大的特点就是不会随的http请求&#xff0c;发给服务器。 默认的模式是hash模式&#xff0c;如果想要修改&#xff0c;可以在router里面的index.js中配置mode属性&#xff0c; 它们俩直接的区别最明面上的有没有#和hist…

类型转换——C++

1. C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c; C语言中总共有两种形式的类型转换&#xff1a;隐式类型转换…

linux工具gcc/g++/gdb/git的使用

目录 gcc/g 基本概念 指令集 函数库 &#xff08;重要&#xff09; gdb使用 基本概念 指令集 项目自动化构建工具make/makefile 进度条小程序 ​编辑 git三板斧 创建仓库 git add git commit git push git status git log gcc/g 基本概念 gcc/g称为编译器…

[ 应急响应基础篇 ] evtx提取安全日志 事件查看器提取安全日志

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…