SQL进阶挑战

插入记录(一)

一次性插入多条记录

insert into
    exam_record(uid, exam_id, start_time, submit_time, score)
values
(1001, 9001, '2021-09-01 22:11:12', '2021-09-01 23:01:12', 90),
(1002, 9002, '2021-09-04 07:01:02', null, null)

插入记录(二)

将一张表的数据插入到另一张表 insert into table select…

insert into exam_record_before_2021( uid,exam_id,start_time,submit_time, score) 
select uid,exam_id,start_time,submit_time, score from exam_record
where year(submit_time)<'2021' and  score is not null;

插入记录(三)

不管数据存不存在都插入 replace into 如果数据存在就先删除后插入

replace  into examination_info(exam_id,tag,difficulty,duration,release_time) 
values(9003,'SQL','hard',90,'2021-01-01 00:00:00');

开窗函数

开窗函数与聚合函数一样,也是对行集组进行聚合计算但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,开窗函数主要分两类:一类是聚合开窗函数,一类是排序开窗函数

聚合开窗函数

【max|min|count|avg|sum】 over(parttition by 字段 order by 字段)

排序开窗函数

row_number ()
rank() :
dense_rank():
在这里插入图片描述

union的使用细节
union是将两个SQL查询结果合并起来,但是要求SQL返回结果的列的个数相同。
在联合order by使用时,要求两个sql 查询出的字段必须完全一致,且只能使用一个order by,且order by 在最后一条sql使用,意寓为对连接好的查询整体进行order by

SELECT * FROM t1 WHERE username LIKE 'l%'
UNION
SELECT * FROM t1 WHERE username LIKE '%m%' ORDER BY score 

关于解决最新的SQL版本中ONLY_FULL_GROUP_BY报错的办法

ONLY_FULL_GROUP_BY的语义就是确定select 中的所有列的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于group by list中的表达式的值。MySQL提供了any_value()函数来抑制ONLY_FULL_GROUP_BY值被拒绝。
所以只需要在非group by的列上加==any_value()==就可以了

select  date_format(submit_time,"%Y%m") submit_month,
count(question_id) month_q_cnt,
any_value(round(count(question_id)/day(last_day(submit_time)),3)) avg_day_q_cnt
from practice_record
where year(submit_time)=2021
group by submit_month

CASE…WHEN THEN…WHEN THEN

SELECT
    STUDENT_NAME,
    (CASE WHEN score < 60 THEN '不及格'
        WHEN score >= 60 AND score < 80 THEN '及格'
        WHEN score >= 80 THEN '优秀'
        ELSE '异常' END) AS REMARK
FROM
    TABLE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值