当前位置: 首页 > news >正文

力扣-高频 SQL 50 题(基础版)-1484. 按日期分组销售产品

一、完整建表 SQL(MySQL 语法):

CREATE TABLE Activities ( sell_date DATE, product VARCHAR(30) ); 该表没有主键(具有唯一值的列)。它可能包含重复项。 此表的每一行都包含产品名称和在市场上销售的日期。
INSERT INTO Activities(sell_date, product) VALUES ('2020-05-30','Headphone'), ('2020-06-01','Pencil'), ('2020-06-02','Mask'), ('2020-05-30','Basketball'), ('2020-06-01','Bible'), ('2020-06-02','Mask'), ('2020-05-30','T-Shirt');

二、需求:

编写解决方案找出每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。
返回按sell_date排序的结果表。
结果表结果格式如下例所示。

三、 思路与解题

题目要求拆解

  1. 按照sell_date分组;
  2. num_sold:当天去重之后产品的个数;
  3. products:当天去重后的产品,字典升序排列,用逗号拼接;
  4. 最终结果按sell_date升序排序。

两个关键:

  1. GROUP_CONCAT(字段 ORDER BY 字段 ASC SEPARATOR ',')分组之后,把多行的字符串拼接成一行,ORDER BY可以指定拼接时的字典顺序;
  2. COUNT(DISTINCT product):分组前必须先去重:同一天同一个产品重复出现只算 1 次。

完整 AC 代码

SELECT sell_date, COUNT(DISTINCT product) num_sold, GROUP_CONCAT(DISTINCT product ORDER BY product SEPARATOR ',') products FROM Activities GROUP BY sell_date ORDER BY sell_date;

分步演示,拿示例数据推演

原始数据:

sell_dateproduct
2020-05-30Headphone
2020-06-01Pencil
2020-06-02Mask
2020-05-30Basketball
2020-06-01Bible
2020-06-02Mask
2020-05-30T-Shirt

针对2020‑05‑30

去重之后产品:Basketball, Headphone, T‑Shirt

  • COUNT(DISTINCT product)→ 3;
  • GROUP_CONCAT拼接得到Basketball,Headphone,T‑Shirt

2020‑06‑02:

去重之后只有Mask,数量为 1。

四、总结

group_concat(distinct 列 order by 列 asc separator '分隔符')

  • 不加DISTINCT:重复值都会拼接进去;
  • ORDER BY可以控制拼接时的排序顺序,完美契合本题字典序;
  • SEPARATOR '符号':默认分隔符是逗号,也可以改成空格或者别的字符

五、拓展(面试知识点)

  1. MySQL 默认GROUP_CONCAT拼接字符串长度有限制(默认 1024 字符),超长会被截断;真实业务里超长场景需要修改系统参数;
  2. 8.0 版本没有别的替代方案,分组拼接字符串GROUP_CONCAT是 MySQL 专属核心函数
http://www.cnnetsun.cn/news/3522137.html

相关文章:

  • ## [特殊字符] 落地操作指南:从笨办法升级到聪明方法
  • 米家API深度解析:Python智能家居编程控制的架构设计与实战应用
  • 阅读APP书源网络导入终极指南:告别复杂操作,一键畅读全网小说
  • MPI-IS Mesh可视化指南:meshviewer工具的10个实用技巧
  • AI写作SOP不是模板套用!揭秘头部内容中台如何用7个动态阈值+3类触发机制实现智能迭代
  • 小红书下载神器XHS-Downloader:终极无水印内容保存完整指南
  • CounterFab部署与发布:从开发到Google Play的完整指南
  • 【Claude生产力临界点突破】:仅需调整这1个系统级参数(temperature=0.35),准确率跃升至92.7%(NIST-Bench实测)
  • Amlogic NPU 上手(一):安装amlnn-toolkit,YOLOv8n 导出ADLA
  • 如何3步永久激活IDM:开源脚本免费解锁Internet Download Manager完整功能
  • 如何快速掌握BepInEx:游戏插件框架的终极解决方案
  • UVM 中 virtual 关键字的使用详解
  • TI F2838x DCSM安全模块实战:寄存器配置与内存隔离指南
  • 深入解析TMS320F2838x I2C驱动:从寄存器到Driverlib函数映射与实战
  • 缠论量化框架chan.py:技术实现与实战应用深度解析
  • TMS320F28003x ERAD模块实战:硬件断点、事件计数器与CRC的嵌入式调试利器
  • 纯HTML单文件实现玛雅十字帕托利 —— 用52格闭环与5颗豆子还原古玛雅双人棋
  • 2026年聚四氟乙烯厂家排行榜前十名品牌有哪些?
  • nRF52芯片DFU升级方案与优化实践
  • ESP32-S3音乐播放器开发实战:WAV解码与I2S音频接口应用
  • AI时代的程序员修养:测试是 AI 编程的安全带
  • 【Claude企业级部署安全白皮书】:从API密钥隔离到上下文泄露防护,金融级合规实践首次公开
  • TMS320F2838x时钟与安全监控:从架构解析到高可靠系统设计实战
  • 如何5分钟快速上手SpringBoot操作日志组件mzt-biz-log
  • 鸿蒙ArkUI实战:生成账本数据导出预览
  • C2000 ePWM高级功能解析:谷底开关、多模块同步与HRPWM实战
  • Priceline Design System 企业级应用案例:如何在大型项目中实施设计系统
  • Intern-S2-Preview-397B-FP8代理集成:连接OpenClaw和Hermes的终极指南
  • QobuzDownloaderX-MOD用户指南:自定义音乐下载路径与音质设置全攻略
  • 【2024最严苛AI模型功能评测】:从零代码微调到合规审计,仅2款模型通过全部19项企业级交付验收标准