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

news2025/1/19 14:13:10

玩了几天,劳逸结合,继续复习刷题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
select
    if (age >= 25, "25岁以上", "25岁以下") AS age_cut,
    count(*) as number
from
    user_profile
group by
    age_cut;

二、日期函数

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

question_practice_detail

期望结果:

 

 涉及知识:

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

select
    day(date) day,
    count(question_id) question_cnt
from
    question_practice_detail
where
    month(date) = 8
    and year(date) = 2021
group by
    date

三、文本函数

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

select
    substring_index (profile, ',', -1) gender,
    count(*) number
from
    user_submit
group by
    gender

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

涉及知识:

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

select
    if (profile like '%female', 'female', 'male') gender,
    count(*) number
from
    user_submit
group by
    gender

 四、窗口函数

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

期望结果:

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

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

select
    device_id,
    university,
    gpa
from
    user_profile
where
    (university, gpa) in (
        select
            university,
            min(gap)
        from
            user_profile
        group by
            university
    )
order by
    university

解法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 by
            university
        order by
            gpa
    ) as rn
from
    user_profile

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

select
    device_id,
    university,
    gpa
from
    (
        select
            *,
            row_number() over (
                partition by
                    university
                order by
                    gpa
            ) as rn
        from
            user_profile
    ) as univ_min
where
    rn = 1
order by
    university;

 

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

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

相关文章

【论文阅读】MAMIL

1、基本信息 misc{Konstantinov_Utkin, title{Multi-Attention Multiple Instance Learning}, author{Konstantinov, AndreiV. and Utkin, LevV.} }2、摘要 本文提出了基于多注意力的MIL问题求解方法&#xff0c;该方法考虑了包中每个被分析实例的相邻实例。在该方法中&…

如何还原min.js文件

最近在看别人给的一个代码包&#xff0c;但是有一些文件是 xx.min.js ,这种文件在vscode中打开后是这样的 这种怎么阅读&#xff0c;太难了&#xff0c;于是全选&#xff0c;右键格式化文档&#xff0c;不管用 通过咨询群友&#xff0c;学到了&#xff1a; 回答一&#xff1…

vscode开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】

一、开发常用的工具栏选项 1、当前打开的文件快速在左侧资源树中定位&#xff1a; 其实打开了当前的文件已经有在左侧资源树木定位了&#xff0c;只是颜色比较浅 2、打开太多文件的时候&#xff0c;可以关闭 3、设置查看当前类或文件的结构 OUTLINE 相当于idea 查看当前类或接…

【计算机网络-数据链路层】流量控制与可靠传输机制

文章目录1 停止-等待协议1.1 无差错情况1.2 有差错情况——数据帧出错或丢失1.3 有差错情况——ACK 丢失1.4 有差错情况——ACK 迟到1.5 性能分析1.6 相关例题2 后退 N 帧协议&#xff08;GBN&#xff09;2.1 无差错情况2.2 超时重传、回退 N 帧2.3 相关例题3 选择重传协议&…

AX7A200教程(6): 串口接收图片数据,通过hdmi接口输出显示

本章节主要使用uart接收图片数据&#xff0c;然后通过ddr3缓存&#xff0c;最后通过hdmi接口显示输出&#xff0c;功能框图如下图所示 uart接收的图片数据位1024*768*3分辨率大小的数据&#xff0c;一共2359296个字节&#xff0c;输入图片如下图所示 图片属性 串口接收数据&…

基于matlab分析卫星星座对通信链路的干扰

一、前言此示例说明如何分析从中地球轨道 &#xff08;MEO&#xff09; 中的卫星星座到位于太平洋的地面站的下行链路上的干扰。干扰星座由低地球轨道&#xff08;LEO&#xff09;的40颗卫星组成。此示例确定下行链路闭合的时间、载波噪声加干扰比以及链路裕量。此示例需要卫星…

锚框+ssd v2 整合笔记

13.4. 锚框 — 动手学深度学习 2.0.0 documentation 13.7. 单发多框检测&#xff08;SSD&#xff09; — 动手学深度学习 2.0.0 documentation 锚框 一.归一化推导公式 目标检测SSD | Lee的个人博客 之前笔记有点错误 https://mp.csdn.net/mp_blog/creation/editor/129528…

输入电阻、输出电阻、特性阻抗、阻抗匹配

一、输入阻抗和输出阻抗 1.输入阻抗 输入阻抗&#xff08;input impedance)是指一个电路输入端的等效阻抗。在输入端上加上一个电压源U&#xff0c;测量输入端的电流I&#xff0c;则输入阻抗Rin就是U/I。你可以把输入端想象成一个电阻的两端&#xff0c;这个电阻的阻值&#…

云原生助力数字原生企业业务快速迭代|阿里云峰会精彩回顾

导语&#xff1a; 4月11日&#xff0c;2023 阿里云峰会如期举行。一直以来&#xff0c;阿里云都积极融入企业数字原生创新发展的新浪潮&#xff0c;是中小企业走向数字原生坚实的支持者。阿里云坚持以数据和智能驱动&#xff0c;与合作伙伴、企业客户一起专注于技术创新&#x…

《Scikit Learn | MorvanZhou 》learning notes

学习资源 https://scikit-learn.org/stable/https://morvanzhou.github.io/tutorials/machine-learning/sklearn/ 文章目录1 Why Scikit Learn2 通用学习模式&#xff08;牛刀小试 pipeline&#xff09;3 sklearn 强大数据库&#xff08;Loaders / Sample Generator&#xff0…

new/delete内存分配操作符

目录 一、C/C的内存分布 二、new与delete操作符 1.new/delete 的使用 2.new申请失败抛异常 3.new/delete操作内置类型 4.new/delete 操作自定义类型 三、operator new与operator delete函数 四、new和delete的实现原理 1.对于内置类型 2.对于自定义类型 ①new的实现…

Prophet学习(四)趋势Changepoints

目录 趋势Changepoints&#xff08;Trend Changepoints&#xff09; Prophet中的自动更改点检测&#xff08;Automatic changepoint detection in Prophet&#xff09; 调整趋势灵活性&#xff08;Adjusting trend flexibility&#xff09; 指定变更点的位置&#xff08;Spe…

DnCNN-pytorch版本代码运行环境配置

一、DnCNN-pytorch相关下载 (1)DnCNN-pytorch版本代码下载 https://download.csdn.net/download/qq_41104871/87457414 (2)GPU版本的torch0.4.1下载 https://download.csdn.net/download/qq_41104871/87658469 (3)相对应的torchvision0.2.1下载 https://download.csdn…

Redis多级缓存搭建(结合案例学习)

文章目录一. JVM进程缓存1. 在docker中安装Mysql服务2. 向数据库中导入数据和导入案例代码3. 在dokcer中部署nginx服务器实现方向代理4. 在nginx目录下导入主页面5. 配置nginx实现反向代理6. 初步认识Caffine7. 使用Caffeine实现本地进程缓存8. 总结二. LUA语法1. 初识Lua2. 基…

TCP并发服务器模型

文章目录1. 循环服务器2. 并发服务器2.1 多进程并发服务器2.2 多线程并发服务器3. 基于TCP的文件传输服务(目前只有下载)1.tftp下载模型2.TFTP通信过程总结3.tftp下载协议分析1. 循环服务器 一次只能处理一个客户端&#xff0c;等这个客户端退出后&#xff0c;才能处理下一个客…

vue大坑:v-for的key以及props传参不当导致的闭包

为什么props传参在模版中使用没问题&#xff0c;在函数中使用不变化 场景 当我们点击上方的月份时&#xff0c;会改变下方加载的卡片信息 代码&#xff1a; 父组件&#xff1a; <divv-for"(item, index) in vocalStore.getCardMonthData":key"index"…

电梯导航案例

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>小兔鲜儿 - 新鲜 惠民 快捷!</title><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"render…

WPS关闭不了后台一直运行的解决办法(wpscloudsvr.exe)

问题描述 前几天&#xff0c;发现每次打开wps时机箱风扇就转得厉害&#xff0c;把WPS界面叉掉后&#xff0c;桌面的任务栏—就是桌面最下面得黑框框—显示Windows图标和时间日期的那个地方也没有WPS任务&#xff0c;但是机箱还是响的厉害&#xff0c;检查了任务管理器发现一直…

SpringBoot自动配置的原理是什么?

自动配置的核心就在SpringBootApplication注解上&#xff0c;SpringBootApplication这个注解底层包含了3个注解&#xff0c;分别是&#xff1a; SpringBootConfiguration ComponentScan EnableAutoConfiguration EnableAutoConfiguration这个注解才是自动配置的核心。 它封…

速Raysync v6.6.8.0版本发布

最近镭速发布了v6.6.8.0版本&#xff0c;已经发布上线了。主要更新内容有服务器下发任务支持指定客户端&#xff0c;客户端增加日志清理和日志压缩&#xff0c;自动删除源文件保持源目录结构&#xff0c;支持将文件投递给其他成员等功能&#xff0c;详细的更新内容如下&#xf…