TypechoJoeTheme

Toasobi的博客

按日期分组(列出一组内某列所有非重复值)

本文最后更新于2023年09月25日,已超过359天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
  • 题目:

表 Activities:

列名类型
sell_datedate
productvarchar

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

编写解决方案找出每个日期、销售的不同产品的数量及其名称。
每个日期的销售产品名称应按词典序排列。
返回按 sell_date 排序的结果表。
结果表结果格式如下例所示。

示例 1:

输入:

Activities 表:
sell_dateproduct
2020-05-30Headphone
2020-06-01Pencil
2020-06-02Mask
2020-05-30Basketball
2020-06-01Bible
2020-06-02Mask
2020-05-30T-Shirt
输出:
sell_datenum_soldproducts
2020-05-303Basketball,Headphone,T-shirt
2020-06-012Bible,Pencil
2020-06-021Mask

解释:
对于2020-05-30,出售的物品是 (Headphone, Basketball, T-shirt),按词典序排列,并用逗号 ',' 分隔。
对于2020-06-01,出售的物品是 (Pencil, Bible),按词典序排列,并用逗号分隔。
对于2020-06-02,出售的物品是 (Mask),只需返回该物品名。

我们按照 sell_date 列对数据进行分组,为了得到 num_sold 列,我们使用 COUNT(DISTINCT product) 来统计每个销售日期售出的唯一产品的数量。 最具挑战性的部分是对每个组中所有唯一的名称进行排序和连接,以获得 products 列。我们可以使用函数 GROUP_CONCAT() 将多行中的多个值组合成一个字符串。下面显示了 GROUP_CONCAT() 函数的语法:
GROUP_CONCAT(
    DISTINCT expression1
    ORDER BY expression2
    SEPARATOR sep
);

此题代码如下

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
朗读
赞(0)
评论 (0)