〇、概述

1、内容

选择(双分支、多分支)

一、条件函数

1、计算25岁以上和以下的用户数量

CASE THEN END多分支选择

SELECT
(CASE
WHEN age>=25 THEN '25岁及以上'
ELSE '25岁以下'
END) AS age_cut,
COUNT(*) AS number
FROM user_profile
GROUP BY age_cut;

IF ELSE双分支选择

SELECT
IF(age>=25,'25岁及以上','25岁以下') AS age_cut,
COUNT(*) AS number
FROM user_profile
GROUP BY age_cut;

集合运算联合UNION

SELECT
'25岁以下' AS age_cut,
COUNT(*) AS number
FROM user_profile
WHERE
age<25
or
age IS NULL
UNION
SELECT
'25岁及以上' AS age_cut,
COUNT(*) AS number
FROM user_profile
WHERE age>=25;

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

CASE WHEN THEN END,中间不加逗号

SELECT
device_id,
gender,
(CASE
WHEN age IS NULL THEN '其他'
WHEN age<20 THEN '20岁以下'
WHEN age BETWEEN 20 and 24 THEN '20-24岁'
ELSE '25岁及以上'
END) AS age_cut
FROM user_profile;

二、日期函数

1、计算用户8月每天的练题数量【多个字段用逗号分隔】

方法1:日期函数(日、月、天)

SELECT
DAY(date) AS day,
COUNT(*) AS question_cnt
FROM question_practice_detail
WHERE
YEAR(date)=2021
and
MONTH(date)=08
GROUP BY day;

方法2:like通配符

SELECT
DAY(date) AS day,
COUNT(*) AS question_cnt
FROM question_practice_detail
WHERE date like '2021-08%'
GROUP BY day;

方法3:substring

SELECT
DAY(date) AS day,
COUNT(*) AS question_cnt
FROM question_practice_detail
WHERE substring(date,1,7)='2021-08'
GROUP BY day;

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

SELECT
COUNT(b.device_id)/COUNT(a.device_id) AS avg_ret
FROM
(SELECT
DISTINCT device_id,
date
FROM question_practice_detail) AS a
LEFT JOIN
(SELECT
DISTINCT device_id,
date
FROM question_practice_detail) AS b
ON
a.device_id=b.device_id
AND
DATE_ADD(a.date,interval 1 day)=b.date;

三、文本函数

1、统计每种性别的人数

SELECT
SUBSTRING(profile,15) as gender,
COUNT(*)
FROM user_submit
GROUP BY gender;

2、截取出年龄【SUBSTRING的第三个参数表示往后取几个字符】

SELECT
SUBSTRING(profile,12,2) AS age,
COUNT(*) AS number
FROM user_submit
GROUP BY age;

3、提取博客URL中的用户名

SELECT
device_id,
SUBSTRING(blog_url,11) AS user_name
FROM user_submit;

四、窗口函数

包括聚合函数、排名分析

1、找出每个学校GPA最低的同学

SELECT
a.device_id,
a.university,
a.gpa
FROM user_profile a
JOIN
(SELECT
university,
MIN(gpa) AS gpa
FROM user_profile
GROUP BY university
) b
ON
a.university=b.university
AND
a.gpa=b.gpa
ORDER BY a.university ASC;

【SQL查询】必会的常用函数:条件函数、日期函数、文本函数、窗口函数的更多相关文章

  1. sql查询时,根据特定的条件给表的某一个字段赋值

    先讲一下需要这个需求的情景: 这是一个招聘求职项目遇到的一个问题.个人A向公司B的职位投递简历后,公司B会收到个人A的简历;但是A投递后把简历删除,公司收到的简历信箱 还有这个简历,但却不能看了. 原 ...

  2. web报表工具FineReport常用函数的用法总结(文本函数)

    文本函数 CHAR CHAR(number):根据指定数字返回对应的字符.CHAR函数可将计算机其他类型的数字代码转换为字符. Number:用于指定字符的数字,介于1Number:用于指定字符的数字 ...

  3. 不简单的SQL查询和排序语句

    真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [OR ...

  4. 三:MySQL系列之SQL查询

    本篇主要介绍使用SQL查询数据库的操作,包括条件查询.排序.聚合函数.分组.分页.连接查询.自关联.子查询等命令操作. 首先我们先创建一个数据库.数据表.插入字段: --------这部分在上篇以及介 ...

  5. slick for play 使用原生sql查询以及拼接sql

    在play中用函数式框架slick来操作数据库是一件很爽的事情.但有时因为某些特殊场景又不得不用原生的sql了. 还好slick支持这种写法,可以看看slick官方文档,Slick Plain SQL ...

  6. 【转】同一个SQL查询语句,为什么使用到的索引不同?

    问: 同一个SQL查询语句,只是修改where条件中的一个值,为什么使用到的索引情况也会不同?谢谢! 1) explain执行结果,如下图: 2) 表中的数据如下图: 3) 表结构如下图: 4) 创建 ...

  7. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  8. 15个初学者必看的基础SQL查询语句

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...

  9. ORACLE 常用SQL查询

    一.ORACLE的启动和关闭 1 .在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su  -  oracle a.启动ORACLE系统 oracle > sv ...

  10. Mysql常用30种SQL查询语句优化方法

    出处:http://www.antscode.com/article/12deee70111da0c4.html 1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使 ...

随机推荐

  1. Java安全之Velocity模版注入

    Java安全之Velocity模版注入 Apache Velocity Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象.它允许web 页 ...

  2. MinIO分布式集群部署方式

    文章转载自:https://blog.51cto.com/u_10950710/4843738 关于分布式集群MinIo 单机Minio服务存在单点故障,如果是一个有N块硬盘的分布式Minio,只要有 ...

  3. ProxySQL(3):Admin管理接口

    文章转载自:https://www.cnblogs.com/f-ck-need-u/p/9281199.html ProxySQL的Admin管理接口 当ProxySQL启动后,将监听两个端口: (1 ...

  4. k8s中yaml文件常见参数含义

    apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本 kind: Deployment #该配置的类型,我们使用的 ...

  5. Java调用C++动态链接库——Jni

    最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用.就去了解了下Jni.使用起来还是比较方便的. 1.  首先编写Java的调用类.例如:    public clas ...

  6. git-secret:在 Git 存储库中加密和存储密钥(上)

    当涉及处理机密信息(如密码.令牌.密钥文件等)等,以下问题值得考虑: 安全性十分重要,但高安全性往往伴随着高度的不便. 在团队中,共享某些密钥有时无法避免(因此现在我们需要考虑在多人之间分发和更新密钥 ...

  7. SECS半导体设备通讯-2 HSMS通信标准

    一 HSMS通信标准概述 HSMS定义了使用 TCP/IP 作为物理传输媒质时的通信接口. HSMS使用TCP/IP流支持,提供了可靠的双向同步传输,可以用来作为SECS-I通信以及其他更高级的通信环 ...

  8. vue项目使用.env文件配置全局环境变量

    一.env文件的认识: (1).env 文件主要的作用是存储环境变量,也就是会随着环境变化的东西,比如数据库的用户名.密码.缓存驱动.时区,还有静态文件的存储路径之类的.因为这些信息应该是和环境绑定的 ...

  9. 路径分析—QGIS+PostgreSQL+PostGIS+pgRouting(一)

    前言 因业务需求,需要做最短路径分析.最近几天查询资料,并自己动手,实现了简单的路径分析. 下面就介绍具体的实现过程. 本篇文章最终结果是在 PostgreSQL 数据库中实现的,后续的可视化展示会继 ...

  10. 研一入坑Go 文件操作

    1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "path" 7 "path/filep ...