1484. 按日期分组销售产品

简介: 1484. 按日期分组销售产品

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

Activities

+-------------+---------+
| 列名         | 类型    |
+-------------+---------+
| sell_date   | date    |
| product     | varchar |
+-------------+---------+
该表没有主键(具有唯一值的列)。它可能包含重复项。
此表的每一行都包含产品名称和在市场上销售的日期。

编写解决方案找出每个日期、销售的不同产品的数量及其名称。

每个日期的销售产品名称应按词典序排列。

返回按 sell_date 排序的结果表。

结果表结果格式如下例所示。

示例 1:

输入:
Activities 表:
+------------+-------------+
| sell_date  | product     |
+------------+-------------+
| 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  | num_sold | products                     |
+------------+----------+------------------------------+
| 2020-05-30 | 3        | Basketball,Headphone,T-shirt |
| 2020-06-01 | 2        | Bible,Pencil                 |
| 2020-06-02 | 1        | Mask                         |
+------------+----------+------------------------------+
解释:
对于2020-05-30,出售的物品是 (Headphone, Basketball, T-shirt),按词典序排列,并用逗号 ',' 分隔。
对于2020-06-01,出售的物品是 (Pencil, Bible),按词典序排列,并用逗号分隔。
对于2020-06-02,出售的物品是 (Mask),只需返回该物品名。

解题思路

使用COUNT和DISTINCT函数计算每个sell_date日期的售出商品数量,使用GROUP_CONCAT和DISTINCT函数将每个sell_date日期售出的商品名称列表合并为一个字符串,其中商品名称按字母顺序排序并以逗号分隔。最终,根据sell_date日期升序排序。

GROUP_CONCAT是MySQL中的一个聚合函数,用于将多行数据中的某个字段值进行合并,并返回一个以指定分隔符分隔的字符串。

它的基本语法如下:

GROUP_CONCAT([DISTINCT] expr [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC]] [SEPARATOR separator])
  • DISTINCT:可选参数,用于去除重复的值。
  • expr:要合并的字段名或表达式。
  • ORDER BY:可选参数,用于指定合并后的字符串的排序方式。
  • separator:可选参数,用于指定合并后的值之间的分隔符,默认为逗号(,)。
  • GROUP_CONCAT可以在SELECT语句中与GROUP BY一起使用,通常用于对聚合后的结果进行合并操作。它将相同分组的多个行的某个字段值合并为一个字符串,并返回给查询结果集。

例如,假设有一个表格包含以下数据:

+----+-------+
| id | fruit |
+----+-------+
|  1 | Apple |
|  1 | Banana|
|  2 | Orange|
|  2 | Mango |
|  2 | Apple |
+----+-------+

我们可以使用GROUP_CONCAT来合并每个id对应的水果名称,以逗号分隔:

SELECT id, GROUP_CONCAT(fruit) AS fruits
FROM table_name
GROUP BY id;

查询结果如下:

+----+----------------------+
| id |        fruits        |
+----+----------------------+
|  1 | Apple,Banana         |
|  2 | Orange,Mango,Apple   |
+----+----------------------+

在上述示例中,GROUP_CONCAT将每个id对应的水果名称合并为一个字符串,并使用逗号分隔。这使得我们可以在一行中查看每个id对应的所有水果。

AC代码

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

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
12月前
|
JavaScript API
「宜搭」如何在选择部门组件后,自动带出该部门下的成员,并查询该成员当月考勤天数
本文档只做参考使用,请结合具体需求修改,如有问题,概不负责!!!! 因本章涉及页面代码,请确保宜搭使用版本可使用页面JS 该篇只会获取当前部门下的成员,不包含下级部门; 注意:涉及到钉钉接口,请严格按照钉钉开放接口文档要求操作; 若此文章对您有帮助,记得点下赞同哦~
468 4
「宜搭」如何在选择部门组件后,自动带出该部门下的成员,并查询该成员当月考勤天数
|
6月前
|
SQL 自然语言处理
leecode-SQL-1484-按日期分组销售产品
leecode-SQL-1484-按日期分组销售产品
49 0
|
数据库
LeetCode(数据库)- 按日期分组销售产品
LeetCode(数据库)- 按日期分组销售产品
115 0
|
BI 数据处理
SAP MM ME1P查询采购订购订单价格历史
SAP MM ME1P查询采购订购订单价格历史
SAP MM ME1P查询采购订购订单价格历史
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
SAP MM 物料成本价格修改历史的查询
SAP MM 物料成本价格修改历史的查询
SAP MM 物料成本价格修改历史的查询
「SAP技术」SAP SD微观研究之根据销售订单查询到该订单发货的批次
「SAP技术」SAP SD微观研究之根据销售订单查询到该订单发货的批次
「SAP技术」SAP SD微观研究之根据销售订单查询到该订单发货的批次
「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单
「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单
「SAP技术」SAP MM ME2N报表能按‘order acknowledgement‘查询采购订单
SAP MM 如何查询所有未审批完的采购订单列表?
SAP MM 如何查询所有未审批完的采购订单列表?
SAP MM 如何查询所有未审批完的采购订单列表?
SAP MM 如何得到委外加工采购订单中需要发给subcontractor的物料的信息?
SAP MM 如何得到委外加工采购订单中需要发给subcontractor的物料的信息?
SAP MM 如何得到委外加工采购订单中需要发给subcontractor的物料的信息?