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

〇、概述

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;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值