记录sql学习----牛客刷题入门结束

– 题目:现在运营想要查看用户信息表中所有的数据,请你取出相应结果
SELECT id,device_id,gender,age,university,province from user_profile;
– 题目:现在运营同学想要用户的设备id对应的性别、年龄和学校的数据,请你取出相应数据
SELECT id,gender,age,university from user_profile;
– 题目:现在运营需要查看用户来自于哪些学校,请从用户信息表中取出学校的去重数据。
SELECT DISTINCT university from user_profile;
select university from user_profile GROUP BY university;
– 题目:现在运营只需要查看前2个用户明细设备ID数据,请你从用户信息表 user_profile 中取出相应结果。
SELECT device_id from user_profile LIMIT 2;
SELECT device_id from user_profile LIMIT 0,2;
– 题目:现在你需要查看前2个用户明细设备ID数据,并将列名改为 ‘user_infos_example’,,请你从用户信息表取出相应结果。
SELECT device_id as user_infos_example from user_profile LIMIT 2;
– 题目:现在运营想要筛选出所有北京大学的学生进行用户调研,请你从用户信息表中取出满足条件的数据,结果返回设备id和学校。
select device_id,university from user_profile where university = “北京大学”;
– 题目:现在运营想要针对24岁以上的用户开展分析,请你取出满足条件的设备ID、性别、年龄、学校。
select device_id,gender,age,university from user_profile where age > 24;
– 题目:现在运营想要针对20岁及以上且23岁及以下的用户开展分析,请你取出满足条件的设备ID、性别、年龄。
SELECT device_id,gender,age from user_profile WHERE age>=20 and age <=23;
– 现在运营想要查看除复旦大学以外的所有用户明细,请你取出相应数据
select id,device_id,gender,age,university,province from user_profile where university != ‘复旦大学’;
– 题目:现在运营想要对用户的年龄分布开展分析,在分析时想要剔除没有获取到年龄的用户,请你取出所有年龄值不为空的用户的设备ID,性别,年龄,学校的信息。
SELECT id,device_id,gender,age,university,province from user_profile WHERE age != ‘’;
SELECT id,device_id,gender,age,university,province from user_profile where age is not NULL;
– 题目:现在运营想要找到男性且GPA在3.5以上(不包括3.5)的用户进行调研,请你取出相关数据。
SELECT device_id,gender,age,university,gpa from user_profile WHERE gpa >3.5 and gender = ‘male’;
– 题目:现在运营想要找到学校为北大或GPA在3.7以上(不包括3.7)的用户进行调研,请你取出相关数据(使用OR实现)
select device_id,gender,age,university,gpa from user_profile where university = ‘北京大学’ or gpa >3.7;
– 题目:现在运营想要找到学校为北大、复旦和山大的同学进行调研,请你取出相关数据。
SELECT device_id,gender,age,university,gpa from user_profile where university in (‘北京大学’,‘复旦大学’,‘山东大学’);
– 题目:现在运营想要找到gpa在3.5以上(不包括3.5)的山东大学用户 或 gpa在3.8以上(不包括3.8)的复旦大学同学进行用户调研,请你取出相应数据
SELECT device_id,gender,age,university,gpa from user_profile where (gpa>3.5 and university=‘山东大学’ )or (gpa > 3.8 and university = ‘复旦大学’);
– 题目:现在运营想查看所有大学中带有北京的用户的信息,请你取出相应数据。
SELECT device_id,age,university from user_profile WHERE university like ‘北京%’;
– 题目:运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
SELECT ROUND(max(gpa),1)as gpa from user_profile where university = ‘复旦大学’;

SELECT gpa from user_profile WHERE university = ‘复旦大学’ ORDER BY gpa desc LIMIT 1;
– 题目:现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。
SELECT COUNT(id) as male_num,ROUND(AVG(gpa),1) from user_profile where gender = ‘male’;
– 题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。
– 用户信息表:user_profile,30天内活跃天数字段(active_days_within_30)
– 发帖数量字段(question_cnt)
– 回答数量字段(answer_cnt)
select gender, university, count(id) as 用户数,active_days_within_30,ROUND(Avg(question_cnt),1)from user_profile GROUP BY university,gender;
– 题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。
– 聚合函数不能使用where,使用having代替条件
SELECT university, ROUND(Avg(question_cnt),3) as a,AVG(answer_cnt) as b FROM user_profile GROUP BY university HAVING a<5 or b<20;
– 题目:现在运营想要查看不同大学的用户平均发帖情况,并期望结果按照平均发帖情况进行升序排列,请你取出相应数据。
select university, AVG(question_cnt) as avg_question_cnt from user_profile GROUP BY university ORDER BY avg_question_cnt asc;
– 题目:现在运营想要查看所有来自浙江大学的用户题目回答明细情况,请你取出相应数据
– 两张表
SELECT a.university, a.device_id,b.question_id,b.result
from user_profile as a INNER JOIN question_practice_detail as b
on university=‘浙江大学’ and a.device_id=b.device_id;
– 运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。
SELECT a.university,COUNT(b.question_id)/count(DISTINCT a.device_id) from user_profile as a inner join question_practice_detail as b
on a.device_id=b.device_id GROUP BY university

– 三表连接 23题目:运营想要计算一些参加了答题的不同学校、不同难度的用户平均答题量,请你写SQL取出相应数据
SELECT a.university,c.difficult_level,COUNT(b.question_id)/COUNT(DISTINCT b.device_id) as avg_answer_cnt
from question_practice_detail as b INNER JOIN question_detail as c
on b.question_id = c.question_id
INNER JOIN user_profile as a
on a.device_id = b.device_id
GROUP BY a.university, c.difficult_level
– 题目:运营想要查看参加了答题的山东大学的用户在不同难度下的平均答题题目数,请取出相应数据
SELECT a.university,c.difficult_level,COUNT(b.question_id)/COUNT(DISTINCT b.device_id)
from user_profile as a
INNER JOIN question_practice_detail as b
on a.device_id = b.device_id
INNER JOIN question_detail as c
on b.question_id = c.question_id
WHERE a.university=‘山东大学’
GROUP BY c.difficult_level;
– 如果在group by后面使用having,则需要by多加上大学,进行分组
SELECT a.university,c.difficult_level,COUNT(b.question_id)/COUNT(DISTINCT b.device_id)
from user_profile as a
INNER JOIN question_practice_detail as b
on a.device_id = b.device_id
INNER JOIN question_detail as c
on b.question_id = c.question_id
GROUP BY a.university, c.difficult_level
HAVING a.university=‘山东大学’;
– 题目:现在运营想要分别查看学校为山东大学或者性别为男性的用户的device_id、gender、age和gpa数据,请取出相应结果,结果不去重。
SELECT device_id,gender,age,gpa from user_profile
WHERE university=‘山东大学’
UNION all
SELECT device_id,gender,age,gpa from user_profile
WHERE gender = ‘male’;
– 题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量
– 本题注意:age为null 也记为 25岁以下
SELECT
CASE
WHEN age<25 or age is NULL THEN
‘25岁以下’
WHEN age >=25 THEN ‘25岁以上’
END age_cut,COUNT() as number
FROM user_profile
GROUP BY
CASE
WHEN age<25 or age is NULL THEN
‘25岁以下’
WHEN age >= 25 THEN ‘25岁以上’
END;
– 题目:现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。(注:若年龄为空请返回其他。)
SELECT device_id,gender,
CASE
WHEN age<20 THEN ‘20岁以下’
WHEN age>=20 and age<=24 THEN ‘20-24岁’
WHEN age>=25 THEN ‘25岁及以上’
WHEN age is null then ‘其他’
END age_cut
from user_profile
– 题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。
– year函数 month(date) DATE_FORMAT(date,“%y-%m”)
SELECT COUNT(
)as question_cnt,DAY(a.date) as day
from question_practice_detail as a
WHERE MONTH(a.date) = 8
GROUP BY date
– 题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
SELECT COUNT(date2)/COUNT(date1) as avg_ret
from (
SELECT DISTINCT a.device_id, a.date as date1,b.date as date2
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 b.date = DATE_ADD(a.date,INTERVAL 1 day)
) as biemin;
– 题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个性别的用户分别有多少参赛者,请取出相应结果
– 方法一:
SELECT
CASE
WHEN a.profile LIKE “%female” THEN ‘female’
ELSE ‘male’
END gender,COUNT() as number
from user_submit as a
GROUP BY
CASE
WHEN a.profile LIKE “%female” THEN ‘female’
ELSE ‘male’
END;
– 方法二:截取substring_index(data,“分隔符”,数字)
SELECT SUBSTRING_INDEX(a.profile,‘,’,-1) as ‘gender’,COUNT(
) as number
FROM user_submit as a
GROUP BY
CASE
WHEN a.profile LIKE “%female” THEN ‘female’
ELSE ‘male’
END;
– 题目:对于申请参与比赛的用户,blog_url字段中url字符后的字符串为用户个人博客的用户名,现在运营想要把用户的个人博客用户字段提取出单独记录为一个新的字段,请取出所需数据。
SELECT device_id, SUBSTRING_INDEX(a.blog_url,“/”,-1) as user_name
from user_submit as a
– 题目:现在运营举办了一场比赛,收到了一些参赛申请,表数据记录形式如下所示,现在运营想要统计每个年龄的用户分别有多少参赛者,请取出相应结果
SELECT
SUBSTR(profile,12,2) as ‘age’,count() as number
from user_submit
GROUP BY age
– 方法二
SELECT SUBSTRING_INDEX(pr.profile2,“,”,1) as ‘age’,COUNT(
) as ‘number’
from
(select SUBSTRING_INDEX(profile,“,”,-2) as profile2
from user_submit) as pr
GROUP BY age
– 题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。
SELECT don.device_id, up.gpa,don.university
FROM
(SELECT MIN(gpa) as ‘gpa’
from user_profile
GROUP BY university) as up
INNER JOIN user_profile as don
on don.gpa = up.gpa
GROUP BY don.university
– 题目: 现在运营想要了解复旦大学的每个用户在8月份练习的总题目数和回答正确的题目数情况,请取出相应明细数据,对于在8月份没有练习过的用户,答题数结果返回0.
SELECT
DISTINCT up.device_id,up.university,COUNT(qpd.question_id) as ‘question_cnt’,
sum(if(qpd.result=“right”,1,0)) as right_question_cnt
FROM
(select device_id,question_id,result,date
from
question_practice_detail
WHERE MONTH(date)= 8) as qpd
right JOIN
(
SELECT device_id,university
from user_profile
where university = “复旦大学”
)as up
on up.device_id = qpd.device_id
GROUP BY up.device_id
– 题目:现在运营想要了解浙江大学的用户在不同难度题目下答题的正确率情况,请取出相应数据,并按照准确率升序输出。
SELECT DISTINCT qd.difficult_level,sum(if(qpd.result=“right”,1,0))/COUNT(qpd.result) as correct_rate
FROM
(SELECT device_id
from user_profile
WHERE university = “浙江大学”) as up
INNER JOIN
question_practice_detail as qpd
on up.device_id = qpd.device_id
INNER JOIN
question_detail as qd
on qd.question_id = qpd.question_id
GROUP BY qd.difficult_level
ORDER BY correct_rate asc;
– 题目:现在运营想要取出用户信息表中的用户年龄,请取出相应数据,并按照年龄升序排序。
SELECT device_id,age
from user_profile
ORDER BY age asc;
– 题目:现在运营想要取出用户信息表中的年龄和gpa数据,并先按照gpa升序排序,再按照年龄升序排序输出,请取出相应数据。
SELECT device_id,gpa,age
from user_profile
ORDER BY gpa ASC,age ASC
– 题目:现在运营想要取出用户信息表中对应的数据,并先按照gpa、年龄降序排序输出,请取出相应数据。
SELECT device_id,gpa,age
from user_profile
ORDER BY gpa DESC,age DESC;
– 题目: 现在运营想要了解2021年8月份所有练习过题目的总用户数和练习过题目的总次数,请取出相应结果
SELECT COUNT(DISTINCT device_id) as did_cnt,COUNT(question_id) as question_cnt
from question_practice_detail
WHERE MONTH(date)=8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zm6Cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值