说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
表 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。