SQL刷题2 | 牛客网

SQL21 浙江大学用户题目回答情况

SQL21 浙江大学用户题目回答情况
1、INNER JOIN内连接
语法:

SELECTFROM 表名
[INNER] JOIN 被连接表
ON 连接条件

执行过程:
首先取表1中的第1个元组,然后从头开始扫描表2,逐一查找满足连接条件的元组,
找到后就将表1中的第1个元组与该元组拼接起来,形成结果表中的一个元组。 表2全部查找完毕后,再取表1中的第2个元组,然后再从头开始扫描表2, …
重复这个过程,直到表1中的全部元组都处理完毕为止。

select q.device_id,question_id,result
from question_practice_detail  q
join user_profile u
on q.device_id = u.device_id
where u.university = '浙江大学'

2、等值连接

select
    q.device_id,
    question_id,
    result
from
    question_practice_detail q,
    user_profile u
where
    u.university = '浙江大学'
    and q.device_id = u.device_id

3、子查询

select
    device_id,
    question_id,
    result
from
    question_practice_detail
where
    device_id in (
        select device_id
        from user_profile
        where university = '浙江大学'
    )

SQL22 统计每个学校的答过题的用户的平均答题数

SQL22 统计每个学校的答过题的用户的平均答题数
1、按学校分组group by university
2、平均答题数量:在每个学校的分组内,用总答题数量除以总人数即可得到平均答题数量
3、表连接:学校和答题信息在不同的表,需要做连接

select
    university,
    count(question_id) / count(distinct q.device_id) as avg_answer_cnt
from
    question_practice_detail as q
    inner join user_profile as u on q.device_id = u.device_id
group by
    university

SQL23 统计每个学校各难度的用户平均刷题数

SQL23 统计每个学校各难度的用户平均刷题数
1、按学校、难度分组group by university,difficult_level
2、平均答题数:总答题数除以总人数
3、连接三个表,u与qpd用device_id连接,qd与qpd用question_id连接

select
    university,
    difficult_level,
    round(
        count(qpd.question_id) / count(distinct qpd.device_id),
        4
    ) as avg_answer_cnt
from
    question_practice_detail qpd
    left join user_profile u on qpd.device_id = u.device_id
    left join question_detail qd on qpd.question_id = qd.question_id
group by
    university,
    difficult_level

SQL24 统计每个用户的平均刷题数

SQL24 统计每个用户的平均刷题数
1、限定条件:山东大学 up.university=‘山东大学’
2、按难度分组:group by difficult_level
3、平均答题数:总答题数除以总人数count(qpd.question_id) / count(distinct qpd.device_id)
4、连接三个表

select
    up.university,
    qd.difficult_level,
    count(qpd.question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from 
    question_practice_detail qpd`在这里插入代码片`
join 
    question_detail qd
on qpd.question_id = qd.question_id
join
    user_profile up
on qpd.device_id = up.device_id and up.university = '山东大学'
group by
    difficult_level

select
    up.university,
    qd.difficult_level,
    count(qpd.question_id) / count(distinct qpd.device_id) as avg_answer_cnt
from
    question_practice_detail qpd,
    question_detail qd,
    user_profile up
where
    up.university = '山东大学' 
    and qpd.device_id = up.device_id
    and qpd.question_id = qd.question_id
group by
    qd.difficult_level

SQL25 查找山东大学或者性别为男生的信息

SQL25 查找山东大学或者性别为男生的信息
1、限定条件:山东大学或男性
2、分别查看&结果不去重:所以直接使用两个条件的or是不行的,直接用union也不行,要用union all,分别去查满足条件1的和满足条件2的,然后合在一起不去重

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'

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

SQL26 计算25岁以上和以下的用户数量
CASE函数:一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
分为:
1、简单CASE函数
语法:

CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END

2、搜索CASE函数
语法:

CASE
WHEN 布尔表达式1 THEN 结果表达式1
WHEN 布尔表达式2 THEN 结果表达式2WHEN 布尔表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
select
    case
        when age < 25
        or age is null then '25岁以下'
        when age >= 25 then '25岁及以上'
    end age_cnt,
    count(*) number
from
    user_profile
group by
    age_cnt

if判断

select
    if(age>=25,'25岁及以上','25岁以下') age_cut,
    count(*) number
from 
    user_profile
group by 
    age_cut

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

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

select
    device_id,
    gender,
    case
        when age < 20 then '20岁以下'
        when age >= 20 and age <= 24 then '20-24岁'
        when age > 24 then '25岁及以上'
        else '其他'
    end age_cut
from
    user_profile

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

SQL28 计算用户8月每天的练题数量
1、限定条件:2021年8月
year/month函数的year(date)=2021 and month(date)=8
或者date_format函数的date_format(date, “%Y-%m”)=“202108”
2、每天:按天分组group by date
3、题目数量:count(question_id)
YEAR(date):返回指定日期的年份值
MONTH(date):返回指定日期的月份数值
DAY(date):返回指定日期的天数值

select
    day(date) day,
    count(question_id) question_cnt
from 
    question_practice_detail
where
    year(date)=2021 and month(date)=8
group by day

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一下 SQL Server 的相关内容。SQL Server 是一种关系型数据库管理系统,用于存储和管理大量结构化数据。在过程中,您可以通过解决一系列与 SQL Server 相关的问来提高对其的理解和应用能力。 以下是一些常见的 SQL Server 方向和相关问: 1. SQL 基础知识: - 什么是 SQL Server?它有哪些特点和优势? - SQL Server 中的数据类型有哪些?它们分别用于存储什么类型的数据? - 如何创建数据库和表格? - 如何插入、更新和删除数据? - 如何使用 SELECT 语句查询数据? 2. 数据查询与筛 - 如何使用 WHERE 子句进行条件选? - 如何使用 ORDER BY 子句对查询结果进行排序? - 如何使用 GROUP BY 子句进行分组聚合操作? - 如何使用 HAVING 子句进行条件筛选(针对分组后的结果)? . 数据操作与修改: - 如何使用 UPDATE 语句修改表格中的数据? - 如何使用 DELETE 语句删除表格中的数据? - 如何使用 INSERT INTO 语句插入新的数据? 4. 数据连接与联结: - 如何使用 JOIN 连接多个表格? - 什么是内连接、外连接和交叉连接? - 如何使用子查询进行复杂的数据查询? 5. 数据聚合与统计: - 如何使用聚合函数(如 SUM、AVG、COUNT、MAX、MIN)进行数据统计? - 如何使用 GROUP BY 子句进行分组统计? - 如何使用 HAVING 子句进行条件筛选(针对分组后的统计结果)? 这些问只是 SQL Server 中的一部分,您可以根据自己的需求和水平选择适合的目进行练习。同时,还可以参考 SQL Server 官方文档、教程和在线资源来深入学习和提高技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值