牛客题霸sql入门篇之必会的常用函数(一)

牛客题霸sql入门篇之必会的常用函数(一)

1 条件函数

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

1.1.1 题目内容

牛客题霸sql入门篇之必会的常用函数(一)_第1张图片

1.1.2 示例代码

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

1.1.3 运行结果

牛客题霸sql入门篇之必会的常用函数(一)_第2张图片

1.1.4 考察知识点

case进行逻辑判断的语法如下(相当于java中的if..else..if)
case when 条件1  then 返回值1
case when 条件2  then 返回值2
......
case when 条件n  then 返回值n
end 自定义列名
注意 这个语法的书写的位置需在select子句中

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

1.2.1 题目内容

a 内容1

牛客题霸sql入门篇之必会的常用函数(一)_第3张图片

b 内容2

牛客题霸sql入门篇之必会的常用函数(一)_第4张图片

1.2.2 示例代码

-- 用case会好一点,用if函数会写的很长
SELECT device_id,gender,
   case when age is null then '其他'
        when age<20  then '20岁一下'
        when age between 20 and 24 then '20-24岁'
        when age>=25 then '25岁及以上'
        -- end 后面接上列的别名
        end age_cut
FROM user_profile

1.2.3 运行结果

牛客题霸sql入门篇之必会的常用函数(一)_第5张图片

1.2.4 考察知识点

同1.1.4

2 日期函数

2.1 计算用户8月每天的练题数量

2.1.1 题目内容

a 内容1

牛客题霸sql入门篇之必会的常用函数(一)_第6张图片

b 内容2

牛客题霸sql入门篇之必会的常用函数(一)_第7张图片

2.1.2 示例代码

SELECT date_format(date,'%d') day,count(*) question_cnt
FROM question_practice_detail
GROUP BY date
HAVING date_format(date,"%m")=8;

2.1.3 运行结果

牛客题霸sql入门篇之必会的常用函数(一)_第8张图片

2.1.4 考察知识点

date_format(date类型的值,'转换后的格式')
-- 其中%Y代表年,%m代表月,%d代表日期

2.2 计算用户平均次日留存率

2.2.1 题目内容

牛客题霸sql入门篇之必会的常用函数(一)_第9张图片

2.2.2 示例代码

-- 做题的时候需要先看清楚数据嘞
SELECT count(r.date)/count(q.date)
FROM (SELECT distinct device_id,date FROM question_practice_detail) q
LEFT JOIN (SELECT distinct device_id,date FROM question_practice_detail) r
ON datediff(r.date,q.date)=1 AND q.device_id=r.device_id

2.2.3 运行结果

牛客题霸sql入门篇之必会的常用函数(一)_第10张图片

2.2.4 考察知识点

1.如果已知的重复数据对后面的筛选有影响的话,可以考虑一开始就筛选掉
2.count等聚合函数,会把null值的列除外,但是count(*)除外
3 对于重复的列可以使用distinct关键字去掉
4 关键点在于求出第一天、第二天用户均在的数据条数、用户第一天总天数

你可能感兴趣的:(牛客题库之sql入门篇,MySQL学习,牛客题霸,sql入门,date_format函数,datediff函数,case用法)