后街小行家
后街小行家
全部文章
分类
题解(10)
归档
标签
去牛客网
登录
/
注册
后街小行家的博客
全部文章
(共10篇)
题解 | #根据指定记录是否存在输出不同情况#极简代码
10行代码搞定 with cte as( select count(start_time)-count(submit_time) as non_0_num from exam_record where uid in (select distinct uid from user_info where ...
Mysql
2021-11-20
1
624
题解 | #第二快/慢用时之差大于试卷时长一半的试卷#精简代码/解答方法汇总
看了大家的答案,发现基本思路都在以下两种方法之内,暂时没有发现其他太有新意的答案 方法1:找出每份试卷的最短和最长时间,筛选掉后再分组计算第二长和第二短的,这种的优点是比较容易想到,缺点是缺乏泛用性,如果要求的是第三长和第三短很明显这个框架就用不了了 with cte as( select exam...
Mysql
2021-11-17
0
404
题解 | #每个6/7级用户活跃情况#可能是最简洁的mysql代码
--两个易错点:1.用 with cte as 通用表表达式的cte做最左边的表左连接其他表才能取全uid 2.当count计数需要多条件筛选并去重时,distinct写在if外面,if内筛选条件可以为多个用and连接,即count(distinct if(筛选条件,v1,null)) 技巧:巧用c...
Mysql
2021-11-17
0
334
题解 | #分别满足两个活动的人#
-- 学到了,字段 as ‘str’是将字段名改为‘str’ 而 ‘str’ as 字段 是将字段下的记录改为‘str’ 神奇的地方是,当字段不存在时,‘str’ as 字段 会创造一个字段!!!! 答案代码如下: select distinct r.uid, case when timestamp...
Mysql
2021-11-16
3
496
题解 | #每个题目和每份试卷被作答的人数和次数#
-- 题目不难,但是有一个易错点,即union连接的两部分单独排序的时候,只分别加 order by 是不行的,会报错,而在union后加的order by 是默认对全局排序的,所以我想到了把两个部门分别加 order by 后再分别加个括号,结果发现虽然没有报错但是括号并没有作用,偶排序并不对,然...
Mysql
2021-11-16
8
757
题解 | #平均活跃天数和月活人数#
-- 方法1 -- 一次聚合,需要进一步理解用户平均活跃天数这个指标,即所有用户当月总活跃天数/用户人数,同时懂得count函数内多字段的巧妙用法,即通过count(distinct uid,date_format(start_time,'%Y%m%d')来计算所有用户当月总活跃天数。 select...
Mysql
2021-11-15
0
364
题解 | #获得积分最多的人(三)#巧用sum(if(expr,v1,v2))
-- sum(if(expr,v1,v2))的妙用,用好了会提升一些写代码的效率 select id,name,grade_sum from( select u.id,u.name,sum(if(type='add',grade_num,-1grade_num)) as grade_sum, ran...
Mysql
2021-11-14
0
385
题解 | #获得积分最多的人(二)#平平无奇的子查询解法
-- 平平无奇的子查询解法,用稠密排序开了个窗 select user_id,name,grade_sum from( select g.user_id,u.id,u.name,sum(grade_num) as grade_sum,dense_rank()over(order by sum(gra...
Mysql
2021-11-14
0
255
题解 | #最差是第几名(二)#普普通通没啥新意但是正确的解法
-- 普普通通没啥新意但是正确的解法 select u.name,sum(grade_num) grade_sum from grade_info g left join user u on g.user_id=u.id group by user_id order by grade_sum des...
Mysql
2021-11-14
0
356
题解 | #最差是第几名(二)#毫无争议的正确解法
-- 毫无争议的正确解法 -- 所有成绩按照顺序排列成字符串,用repeat函数复制每个成绩,用group_concat函数合并所有成绩形成字符串,用replace函数把字符串中的“,”替换为空格(''),然后用mid函数选取中位数位置的字符,由于奇数和偶数中位数不同,用union(去重)合并两种情...
Mysql
2021-11-14
0
330