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

目录
相关文章
|
1月前
|
前端开发
基于jeecgboot的ERP单据中增加编号的方法
基于jeecgboot的ERP单据中增加编号的方法
43 1
|
7月前
|
JavaScript API
「宜搭」如何在选择部门组件后,自动带出该部门下的成员,并查询该成员当月考勤天数
本文档只做参考使用,请结合具体需求修改,如有问题,概不负责!!!! 因本章涉及页面代码,请确保宜搭使用版本可使用页面JS 该篇只会获取当前部门下的成员,不包含下级部门; 注意:涉及到钉钉接口,请严格按照钉钉开放接口文档要求操作; 若此文章对您有帮助,记得点下赞同哦~
322 4
「宜搭」如何在选择部门组件后,自动带出该部门下的成员,并查询该成员当月考勤天数
|
1月前
|
SQL 自然语言处理
leecode-SQL-1484-按日期分组销售产品
leecode-SQL-1484-按日期分组销售产品
36 0
7-17 航空公司VIP客户查询 (10 分)
7-17 航空公司VIP客户查询 (10 分)
142 0
生成以周统计的表头,跨月份的周算在后一个月
这是人力统计的一个表格的表头,根据月份,划分周,每周从周一开始到周日(国内习惯性)。而跨月份的周算在前一个月还是后一个月,我们的需求是算在后一个月。根据情况而定。
190 0
生成以周统计的表头,跨月份的周算在后一个月
|
数据库
LeetCode(数据库)- 按日期分组销售产品
LeetCode(数据库)- 按日期分组销售产品
102 0
|
数据库
使用子查询统计每个客户预订线路的数量,要求按照预订线路数升序显示客户姓名和预订线路数
使用子查询统计每个客户预订线路的数量,要求按照预订线路数升序显示客户姓名和预订线路数
98 0
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
SAP MM初阶创建服务采购订单时订购单位和物料组的缺省值
|
BI 数据处理
SAP MM ME1P查询采购订购订单价格历史
SAP MM ME1P查询采购订购订单价格历史
SAP MM ME1P查询采购订购订单价格历史