列表

详情


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),只需返回该物品名。

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
# Write your MySQL query statement below

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;

上一题