题解 | #每月及截止当月的答题情况#

每月及截止当月的答题情况

https://www.nowcoder.com/practice/1ce93d5cec5c4243930fc5e8efaaca1e

/*关键点:窗口函数执行在select语句后面;select后面的窗口函数可以放在if()里面从而嵌一层判断(当然也可以靠子查询实现);sum()和max()作为窗口函数时,使用order by指定排序列,可实现起始-当前行的求和或取大(默认升序)*/
# 查询开始月份、uid、和新增用户判断列
select date_format(start_time, '%Y%m') start_month, uid,
if(start_time=min(start_time)over(partition by uid), 1, 0) new_tag
from exam_record

# 查询自从有用户作答记录以来,每月的试卷作答记录中月活用户数、新增用户数、截止当月的单月最大新增用户数、截止当月的累积用户数。结果按月份升序输出
# 截止当月的单月最大新增用户数、截止当月的累积用户数两个字段要基于“每月的试卷作答记录中月活用户数、新增用户数”这两个字段的查询结果,在select查询结果列(但不能使用别名)基础上使用窗口函数生成新列
select start_month, count(distinct uid) mau, sum(new_tag) month_add_uv, max(sum(new_tag))over(order by start_month) as max_month_add_uv, sum(sum(new_tag))over(order by start_month) as cum_sum_uv
from (
    select date_format(start_time, '%Y%m') start_month, uid,
    if(start_time=min(start_time)over(partition by uid), 1, 0) new_tag
    from exam_record
) k1
group by start_month
order by start_month;

全部评论

相关推荐

团子请爱我一次_十月...:不是戈门,干哪来了,这就是java嘛
点赞 评论 收藏
分享
rndguy:个人思路,抛砖引玉。 要我的话我先问清楚需求:要什么精度,什么速度,什么环境。 如果精度要求很低,平台也有点柔性的话,只需要输出pwm,然后开个中断记录各多少个脉冲,如果脉冲时间不对齐了就反馈控制电流加减就行。要求同步要求稍微高点的话可以在脉冲间做个线性插值,同步精度会高些。 但总体来说,如果直流有刷只有脉冲没有好的编码器的话很难做精准定位什么的(除非用一些电机磁路结构相关的奇技淫巧如高频注入什么的),所以要求更高就需要大量参数辨识和校准,那就慢多了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务