题解 | #月总刷题数和日均刷题数#

月总刷题数和日均刷题数

https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746

select date_format(submit_time,'%Y%m') submit_month,
any_value(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 date_format(submit_time,'%Y')='2021'
group by submit_month
union all
select '2021汇总' as submit_month,
count(question_id) month_q_cnt,
round(count(id)/31,3) avg_day_q_cnt
from practice_record
where date_format(submit_time,'%Y')='2021'
order by submit_month;

1.order by 得放在union整个的最后

2.lastday函数

3.union和unionall的区别

    Union和Union All是SQL查询中常用的操作符,用于合并两个或多个SELECT语句的结果集。以下是它们之间的主要区别:

    1. 是否包含重复行:Union会对两个或多个查询的结果集进行并集操作,但会自动删除结果集中的重复行。而Union All也会对两个或多个查询的结果集进行并集操作,但会包含结果集中的所有行,包括重复行。
    2. 执行效率:由于Union需要进行去重操作,因此在某些情况下,其执行效率可能会低于Union All。而Union All只是简单地合并查询结果,不进行去重和排序操作,因此在没有重复数据或不需要去重的情况下,使用Union All的执行效率会更高。
    3. 排序:Union会对获取的结果进行默认规则的排序,而Union All不会对获取的结果进行排序操作。

    总的来说,Union和Union All的主要区别在于是否包含重复行、执行效率和是否进行排序。在选择使用哪个操作符时,需要根据具体的查询需求和场景来决定。如果需要删除结果集中的重复行并对结果进行排序,则可以使用Union;如果不需要删除重复行并且不关心排序结果,则可以使用Union All来提高执行效率。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务