# Write your MySQL query statement below
1484. 按日期分组销售产品
表 Activities
:
+-------------+---------+ | 列名 | 类型 | +-------------+---------+ | sell_date | date | | product | varchar | +-------------+---------+ 此表没有主键,它可能包含重复项。 此表的每一行都包含产品名称和在市场上销售的日期。
编写一个 SQL 查询来查找每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。
返回按 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),只需返回该物品名。
原站题解
pythondata 解法, 执行用时: 288 ms, 内存消耗: 61.4 MB, 提交时间: 2023-08-09 17:32:16
import pandas as pd def categorize_products(activities: pd.DataFrame) -> pd.DataFrame: # 按照 sell_date 进行分组,并对产品进行去重和计数 result = activities.groupby('sell_date')['product'].agg(['nunique', lambda x: ','.join(sorted(set(x)))]) # 重命名列名 result.rename(columns={'nunique': 'num_sold', '<lambda_0>': 'products'}, inplace=True) # 重置索引,将 sell_date 变为普通列 result.reset_index(inplace=True) # 按照 sell_date 进行升序排序 result.sort_values(by='sell_date', inplace=True) return result
mysql 解法, 执行用时: 418 ms, 内存消耗: 0 B, 提交时间: 2022-06-01 10:11:53
# Write your MySQL query statement below select sell_date, count(distinct product) as num_sold, group_concat(distinct product) as products from activities group by sell_date order by sell_date asc;
mysql 解法, 执行用时: 461 ms, 内存消耗: 0 B, 提交时间: 2022-05-27 14:52:56
# Write your MySQL query statement below select sell_date, count(distinct product) as num_sold, group_concat(distinct product) as products from activities group by sell_date order by sell_date asc;