牛客SQL127 月总刷题数和日均刷题数

「牛客网-SQL篇」SQL127 月总刷题数和日均刷题数 阅读详情

根据本题主要用来记录初次学习coalesce函数、group by with rollup函数的一些想法。

原题链接https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746?tpId=240&tqId=2183006&ru=%2Fpractice%2F4963f6d63dde48d787aaa2b43460fb4b&qru=%2Fta%2Fsql-advanced%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3DSQL%25E7%25AF%2587%26topicId%3D240
在这里插入图片描述
在这里插入图片描述
这里牛客给了一句提示:
在这里插入图片描述

我的初始思路:首先我是想用union来联合两个select来做这道题,先搜索每个月的数据最后再汇总。根据需要的目标来对每一列进行检索。
第一版sql

select
 	date_format(submit_time,"%y%m") as submit_month,
 	count(question_id) month_q_cnt,
 	month_q_cnt/每个月份的天数 avg_day_q_cnt  
from practice_record 
where year(submint_time)='2021'
group by submit_month 
order by submit_month

在这里我卡住了,我不知道月份怎么求这里学习了解了日期处理的两个函数

DAYOFMONTH(d) 函数返回 d 是一个月中的第几天,范围为 1~31。
LAST_DAY()函数是取某个月最后一天的日期。

这两个函数比较好理解不再赘述。
根据这两个我改进了一下初始代码,以下为第二版

select
 	year_mon as submit_month,
 	count(question_id) month_q_cnt,
 	round(month_q_cnt/t.days_month, 3) avg_day_q_cnt  
from (
	select 
		question_id,
		dayofmonth(last_day(submit_time)) as days_month,
		date_format(submit_time,"%y%m") as year_mon
	from practice_record
	where year(submint_time)='2021'
) as t
group by submit_month 
order by submit_month

但是这个跑不通,在days_month有问题
在这里插入图片描述
在这里我单独跑了一下内层select
在这里插入图片描述
在这里插入图片描述
这里看到问题了吗,同一个月份,question_id有多个值!!!!虽然都是同样的数,但是可能不知道要取哪一个,这里我试了max、min都可以继续完成接下来的操作。另外在date_format(submit_time,"%Y%m") as year_mon这一句中记得用大写的Y才是完整年份,谨记。

select
 	year_mon as submit_month,
 	count(question_id) month_q_cnt,
 	round(count(question_id)/any_value(t.days_month), 3) avg_day_q_cnt  
from (
	select 
		question_id,
		dayofmonth(last_day(submit_time)) as days_month,
		date_format(submit_time,"%Y%m") as year_mon
	from practice_record
	where year(submit_time)=2021
) as t
group by submit_month 
order by submit_month

在这里插入图片描述
这样就可以进行union下一步

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

union 
select
    '2021汇总' as submit_month,
    count(question_id) as month_q_cnt,
    round(count(question_id) / 31, 3) as avg_day_q_cnt
from
    practice_record
where
    year (submit_time) = 2021
order by
    submit_month

这样就可以a掉这道题了,a之前还有个问题就是order by 的位置,union在没有括号的情况下只能使用一个order by

a了之后当然要去欣赏大佬的做法,这里可以注意到大佬的做法非常简洁,我们就注意到题目一开始给的注意我们是不是遗忘了,好像就是在提示在聚合函数里下功夫。然后我们就一起学习一下下面这个代码吧。

select
    coalesce(year_mon, '2021汇总') as submit_month,
    count(question_id) as month_q_cnt,
    round(count(question_id) / max(t.days_month), 3) as avg_day_cnt
from
    (
        select
            question_id,
            dayofmonth (last_day (submit_time)) as days_month,
            date_format (submit_time, '%Y%m') as year_mon
        from
            practice_record
        where
            year (submit_time) = 2021
    ) as t
group by
    t.year_mon
with
    rollup;

知识点讲解:

  • COALESCE() 函数返回参数列表中第一个不是 NULL 的值。如果全部参数都是 NULL,该函数将返回 NULL。
  • WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。

首先应该会产生几个疑问:

  • 为什么这里coalesce函数可以用来简化代码
  • order by 不需要了吗
  • WITH ROLLUP 很迷,第一次接触我确实对这个很疑惑。

接下来我们从另一个例子进行切入,这部分copy另一个网站https://www.runoob.com/mysql/mysql-group-by-statement.html

例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:


+----+--------+---------------------+--------+
| id | name   | date                | signin |
+----+--------+---------------------+--------+
|  1 | 小明 | 2016-04-22 15:25:33 |      1 |
|  2 | 小王 | 2016-04-20 15:25:47 |      3 |
|  3 | 小丽 | 2016-04-19 15:26:02 |      2 |
|  4 | 小王 | 2016-04-07 15:26:14 |      4 |
|  5 | 小明 | 2016-04-11 15:26:40 |      4 |
|  6 | 小明 | 2016-04-04 15:26:54 |      2 |
+----+--------+---------------------+--------+

mysql> SELECT name, COUNT(*) FROM   employee_tbl GROUP BY name;
+--------+----------+
| name   | COUNT(*) |
+--------+----------+
| 小丽 |        1 |
| 小明 |        3 |
| 小王 |        2 |
+--------+----------+


mysql> SELECT name, SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------+--------------+
| name   | signin_count |
+--------+--------------+
| 小丽 |            2 |
| 小明 |            7 |
| 小王 |            7 |
| NULL   |           16 |
+--------+--------------+
4 rows in set (0.00 sec)

通过这两个对比我们可以看到多了with rollup后会多一行name为空的信息。这时候就需要体现coalesce的作用了
coalesce 语法:

select coalesce(a,b,c);

参数说明:如果anull,则选择b;如果bnull,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。

以下实例中如果名字为空我们使用总数代替:

mysql> SELECT coalesce(name, '总数'), SUM(signin) as signin_count FROM  employee_tbl GROUP BY name WITH ROLLUP;
+--------------------------+--------------+
| coalesce(name, '总数') | signin_count |
+--------------------------+--------------+
| 小丽                   |            2 |
| 小明                   |            7 |
| 小王                   |            7 |
| 总数                   |           16 |
+--------------------------+--------------+
4 rows in set (0.01 sec)

到这里我们就大概能够明白了这两个搭配的作用吧。
对我们原来的题目也就更加清晰的理解了
最后一个问题,为啥没有order by 也会自动排序呢?希望大家可以告诉我!!

一次实时数据链路丢数排查:从 MQTT 队列积压到 SQL 统计开销 本文通过一次实时数据链路压测,排查了从MQTT到ClickHouse的端到端数据丢失问题。核心方法是为每条消息添加序号,建立独立观察点(MQTT订阅端、Kafka消费者),结合转发服务阶段统计与线程栈分析,定位到下游处理速度不足源于Druid SQL合并统计的高开销。优化措施包括关闭SQL合并、扩容代理队列、增强生产侧失败处理,并验证15分钟内实现全链路对账一致,显著缓解积压与丢包。关键收获:数据可对账、明确各阶段“成功”定义、关注客户端队列状态。 阅读详情

相关推荐

Z-Image Turbo LoRA训练全流程:从数据标注到模型部署的保姆级指南(附ai-toolkit配置)

本文提供了一份详尽的Z-Image Turbo LoRA模型训练全流程指南,涵盖从数据准备、智能标注、参数调优到最终模型部署与Z-Image集成的每个环节。重点解析了使用ai-toolkit训练整合包进行高效训练的核心技巧与避坑方法,旨在帮助用户稳定训练出高质量的专属角色模型。

weixin_29088655的博客 962

【牛客】SQL127 月总刷题数和日均刷题数

解释:2021年8月共有2次刷题记录,日均刷题数为2/31=0.065(保留3位小数);2021年9月共有3次刷题记录,日均刷题数为3/30=0.100;2021年共有5次刷题记录(年度汇总平均无实际意义,这里我们按照31天来算5/31=0.161)

talle2021的博客 883

MySQL 优化 - index_merge 导致查询偶发变慢

今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。优化器通过某种机制检测到 index_merge 能带来性能提升,某些情况下不会带来提升,反而会耗费更长的时间,属于优化器的缺陷,可以通过调整表中的索引来解决。

分享既学习 1255

牛客SQL127——月总刷题数和日均刷题数

因为会出现only group by问题,所以使用any_value。在最后记得加上where score is not null。思路:这题小问题很多。

weixin_51350949的博客 173

2022年全国职业院校技能大赛高职组大数据技术与应用赛项赛卷⑩—解析答案

工业互联网是工业全要素、全产业链、全价值链的全面连接,是人、机、物、工厂互联互通的新型工业生产制造服务体系,是互联网从消费领域向生产领域、从虚拟经济向实体经济拓展的核心载体,是建设现代化经济体系、实现高质量发展和塑造全球产业竞争力的关键支撑。加快发展工业互联网产业,不仅是各国顺应产业发展大势,抢占产业未来制高点的战略选择,也是我国推动制造业质量变革、效率变革和动力变革,实现高质量发展的客观要求。 为完成工业大数据分析工作,你所在的小组将应用大数据技术,以Scala作为整个项目的基础开发语言,基于大数据平台综

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 582

MTK Meta ISP 工具使用技巧与参数读取路径全解析

在联发科(MediaTek, MTK)平台上进行相机图像调试时,Meta ISP 工具是连接 PC 与设备进行参数调整、寄存器读取和图像输出的重要工具。本文以实战角度出发,系统梳理 Meta ISP 的使用流程、关键模块功能、典型调试技巧与参数读取路径,结合最新版平台(如MTK Genio/Dimensity 系列)架构,帮助工程师掌握联发科图像调优的核心流程。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1148

牛客网SQL进阶127: 月总刷题数和日均刷题数

牛客网SQL进阶127: 月总刷题数和日均刷题数

爱吃辣条的博客 1594

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

仙魁XAN 8575

SQL127 月总刷题数和日均刷题数

那再用。

11 213

JAVA:Spring Boot 集成 Atomikos 实现分布式事务

摘要: Atomikos是一款基于JTA标准的分布式事务协调器,通过两阶段提交(2PC)协议实现跨数据库/消息系统的事务一致性,适用于金融等高要求场景。本文以Spring Boot集成Atomikos为例,演示多数据源(订单库、库存库)的分布式事务管理。核心步骤包括:引入Atomikos依赖、配置XA数据源、设置两阶段提交的MyBatis多数据源,并通过Atomikos协调全局事务,确保跨库操作原子性。代码示例涵盖配置类、YAML定义及MySQL XA数据源初始化,为分布式系统提供强一致性解决方案。

木头 334

闲鱼爬虫实战:模拟手机端破解反爬策略,爬取指定商品搜索数据,爬取闲鱼搜索指定商品(需手机端模拟)o 技术点:抓包分析、cookie与token

技术点作用抓取手机 App 请求,分析 API 结构、Header、参数加密情况requestsPython 中最常用的 HTTP 库,用于发送模拟请求Session 对象自动管理 Cookie,保持会话User-Agent & 设备特征模拟手机型号、系统版本,绕过服务端检测闲鱼部分接口存在签名,需要逆向或复用有效 Token多线程/异步提高爬取效率(需节制,避免封 IP)解析 HTML 或 JSON 数据注意:闲鱼的接口加密程度中等偏上,部分接口存在动态签名(如x-signx-mini-wua。

2201_76125261的博客 712

牛客题霸-SQL进阶篇(刷题记录一)

本文基于前段时间学习总结的 MySQL 相关的查询语法,在牛客网找了相应的 MySQL 题目进行练习,以便加强对于 MySQL 查询语法的理解和应用。由于涉及到的数据库表较多,因此本文不再展示,只提供 MySQL 代码与示例输出。部分题目因为较难,难以独立做出或代码仅在平台上运行不成功,故附上题目解法讨论的链接供大家参考。由于部分题目中涉及的内容并不是未来实习和工作中的主要方向,因此本文暂时会跳过一部分题目。

大面鱼的博客 1455

LVGL嵌入式GUI工程化架构与多窗口实践

嵌入式GUI开发中,LVGL作为轻量级图形库,其核心价值在于高效渲染与事件驱动机制。理解LVGL的对象树模型、资源管理机制(如RAW图像、静态字体)和屏幕生命周期,是构建稳定界面的基础。结合FreeRTOS等实时操作系统,可实现低功耗、高响应的交互体验。典型应用场景包括智能电表、HMI人机界面、工业控制面板等对内存敏感、需长期运行的设备。本文以微信式多窗口架构为范例,深入解析LVGL工程化落地的关键路径:分层目录结构、窗口模块封装、状态机式登录逻辑、TabView多页导航及图表/仪表盘动态可视化,覆盖从资源

weixin_36001279的博客 88

NIUKE SQL:进阶挑战 (中)

牛客SQL—进阶03-04 聚合分组查询+多表查询

He_jinian的博客 1313

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MySQL】【牛客-SQL进阶挑战】03 聚合分组查询

MySQL 聚合函数的使用,有一定的难度

guliguliguliguli的博客 463

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

牛客SQL进阶挑战目录

牛客SQL进阶挑战目录

qq118640594X的博客 429

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

牛客网SQL进阶挑战

round(count(*)/day(last_day(max(submit_time))),3) as avg_day_q_cnt //此处的max是防止报错:ONLY_FULL_GROUP_BY。否则,直接插入新数据。) t2 using(uid) //t1t2这两个表得分开,不然将count(*) exam_cnt放到前面会导致只统计用户的高难度SQL这一类。//备注更兼容版round(incomplete_cnt/cast(cnt as decimal),3)

qq_53596623的博客 396

SQL并行执行的机制解析与计划调控实践

并行执行是大数据量场景的核心提速手段,但用错代价极高。本文从问题边界讲起,梳理并行度的确定层级、优化器生成并行计划的逻辑、数据再分布与通信代价、倾斜成因与识别方法,覆盖表设计、索引策略、并行DML、RAC调度与参数取舍,配合三个真实失败案例与诊断步骤,给出一套可落地的并行治理流程与误区清单。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 779

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 457

云数仓向PostgreSQL生态延伸的技术动因与工程代价

Snowflake以2.5亿美元收购Crunchy Data,把云数仓的触角伸向PostgreSQL生态。本文从负载补齐、元数据标准化与AI应用低延迟读写三个切面拆解收购动机,逐层分析列存与行存的能力边界、存算分离下引入事务负载的提交延迟预算、逻辑复制的接缝风险、元数据统一与混合负载隔离冲突,并给出迁移落地的分阶段验收清单与七个典型误区,最后提供评估厂商PostgreSQL能力的六项观察指标。

搞定过:百亿级数据、万级QPS、零宕机、AI工业化。 447

记一次Sql Server2012免费版如何升级到2016企业版本

本文记录了将SQL Server 2012免费版升级至企业版的完整流程,重点解决因版本限制导致无法使用代理功能的问题。通过加载ISO安装包,选择从旧版本升级,完成功能安装与实例配置后,需手动启用“代理XP”并检查服务状态。若代理仍异常,需通过安装程序添加“SQL Server代理”组件,最终实现企业版功能完整启用。

qq_57492774的博客 200

PostgreSQL 日报| OAuth 校验库置空仍可登录(11 月 9 日)

Tomas Vondra 提交了针对 commit a798660ebe3 中"bogus parameterizations"漏洞的清理版修复补丁,并为各个回退分支分别提供了对应的版本。据报道,OpenAI 正在进行新一轮融资,已额外筹集 110 亿美元,整轮融资尚未正式收官,预计将在未来数周内完成。作为一款面向现代开发流程的 Serverless Postgres 数据库,Lakebase 支持即时分支与环境克隆,并通过计算与存储分离的架构提升性能、降低成本、增强可靠性。函数中发现了一个 bug。

IvorySQL的博客 240

SQL Server 基础语法详解:从建库建表到约束与增删改查

本文以学生信息表 Students 为主线,系统讲解数据库基础语法,涵盖建库、建表、约束添加及增删改查操作。通过 SQL Server T-SQL 示例,清晰区分数据库、表结构与记录的操作对象,强调字段类型、非空、自增、主键、唯一、检查与默认约束的定义与应用,帮助读者理清各语句间的逻辑关系,掌握数据库管理的核心技能。

2601_96519735的博客 942

XSS 过滤器 vs SQL 注入防护:自动化测试平台中的

通过分析 AutoTest Platform 的源码可以看出,在实际开发中合理运用字符转义、参数化查询和白名单策略能够有效减少 Web 安全风险。对于非科班出身或刚刚入门的技术人员来说,理解这些安全措施的具体实现方式是非常重要的一步。建议读者可以尝试以下几个方向深入学习:1. 学习 Jsoup 库及 Whitelist API 的用法,并尝试自定义一套适用于自身项目的 HTML 清理规则;

后台模板 238

智能问数(Text2SQL)的两大方案及实施成本

现在流行挂个 RAG 知识库,把表结构、字段名、业务术语全向量化存起来,每次查询时现去检索相关片段喂给大模型。只做一件事,把口语化的自然语言转成有规则的自然语言,也就是“规范文本”。然后规则引擎根据预先配置好的业务词典和映射规则,把规范文本编译成 100% 准确的 SQL。核心工作量在配置业务词典,把用户爱说的“华北区”“在途订单”这些词,跟数据库表和字段对上。关键是,规则是写死的、确定的。SQL 怎么生成、逻辑怎么组合,全都写在规则里。出了问题,查规则、改词典、补映射,改完就知道对不对,没有不确定性。

Raqsoft 158

sqlsugar入门

sqlsugar入门

bjzhang75的博客 238
上一篇: 熵权法原理及操作方法
黯伤独醉
博客等级 码龄6年 15粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值