〇、概述

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;

最新文章

  1. linux学习日记之鸟哥
  2. BZOJ1004: [HNOI2008]Cards
  3. 移动前端头部标签(HTML5 head meta)
  4. 第四章:javascript: 栈
  5. SVN 首次用TortoiseSVN Checkout 提示Unexpected HTTP status 405
  6. Objective-C MRC多个对象相互引用的内存管理
  7. webservice未能加载文件或程序集“**.DLL”或它的某一个依赖项。
  8. C# 取小数点
  9. UITabBarController 标签栏控制器
  10. iconv any encoding to UTF-8
  11. boost的并发库
  12. python标准库-日志logging
  13. Win下JDK的安装和简单使用教程
  14. MonggoDB(二)
  15. SonarLint 代码质量管理
  16. 初识Vulkan【转】
  17. FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
  18. [PHP] 02 - Namespace &amp; Class
  19. P1005 矩阵取数游戏
  20. Natural Language Processing, 2017, Mar.29, Weekly Report

热门文章

  1. UEC++ 接口
  2. Beats在Kibana中的集中管理
  3. 官方使用logstash同步Mysql数据表到ES的摘抄
  4. docker的cmd命令详解-前后台理解
  5. 监控Redis集群--废弃,使用新教程
  6. HTML&amp;CSS-盒模型运用居中方式合集
  7. Java并发编程 | 从进程、线程到并发问题实例解决
  8. 谣言检测()——《Debunking Rumors on Twitter with Tree Transformer》
  9. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案
  10. 陆地观测卫星数据服务(CRESDA)订单ftp地址错误—已解决不能下载问题