count distinct和group by一起用_clojure中group-by后对分组统计的一个小玩意儿

最近在用clojure进行数据分析, 想要一个pandas中的agg运算.(也就是所谓的针对map中键值的运算) 干脆就采用对矩阵某一列传匿名函数的形式进行处理了.

弄了个替代品,

(defn group-by-reduce [func  target-map]                                                     
   (zipmap (keys target-map)                                                                  
           (->>                                                                               
            target-map                                                                        
            vals                                                                              
            (map func)))) 

用起来大概像这个样

(->>  all-order-list                                                                    
     (group-by #(get % :order_detail_id))                                                                               
     (group-by-reduce                                                         
      (fn [coll]                                                              
        ;; 销售订单下生产任务编号                                             
        [;;                                                                   
         (->> coll (map #(get % :notice_id)  count ))                                 
         ;; 客户名称                                                          
         (->> coll (map #(get % :custom_name)) (apply max) ])))   

这东西大概等价于python下的 dfagg = df.groupby('order_detail_id').agg(['count', 'max'])

好吧 ,其实差别挺大的.

不过好处就是, 基本上可以搞任何自己想要搞的小动作.而且可以针对某一列单独选择匿名函数来处理, 连带清洗等逻辑都可以放在->>宏里解决,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: distinctgroup by一起用可以实现对数据的去重和分组统计distinct用于去除重复的数据,而group by则是将数据按照指定的列进行分组,然后对每组数据进行统计计算。在使用distinctgroup by时,需要注意选择合适的列进行去重和分组,以达到预期的统计结果。同时,还需要注意distinctgroup by的执行顺序,以避免出现错误的统计结果。 ### 回答2: 在SQL语言distinctgroup by两个关键字常常一起使用,用于查询数据后,返回唯一的、不重复的结果集和分组聚合后的结果。这两个关键字的使用对于数据的处理和查询结果的准确性非常重要。 1. distinct:表示要查询的数据只返回唯一的、不重复的结果,即去重。distinct通常会与select语句一起使用,用来限制查询结果集的重复数据。 例如,查询所有订单出现过的商品名称: SELECT DISTINCT goods_name FROM order_table; 2. group by:表示要根据指定的列对数据进行分组聚合,一般会在聚合函数(sum、avg、count等)的基础上进行,获取每组数据的统计结果。 例如,查询每个销售员的订单量和订单总金额: SELECT salesman, COUNT(order_id) AS order_count, SUM(order_amount) AS order_total FROM order_table GROUP BY salesman; 3. distinctgroup by一起使用:当需要对查询结果同时进行去重和分组聚合时,distinctgroup by可以一起使用。 例如,查询每个商品的订单量和订单总金额: SELECT goods_name, COUNT(DISTINCT order_id) AS order_count, SUM(order_amount) AS order_total FROM order_table GROUP BY goods_name; 在这个例子使用DISTINCT关键字过滤了重复的订单ID,然后按照商品名称对数据进行了分组聚合,得到了各个商品的订单量和订单总金额。 通过distinctgroup by的使用,可以使查询数据更加灵活,获取到满足自己需求的结果,让数据处理更加高效和准确。 ### 回答3: distinctgroup by都是SQL语言的常用关键词之一。虽然它们可以单独使用,但是在一些特殊的情况下,也可以组合使用,以实现更复杂的数据查询和分析需求。 distinct关键词用于标识查询结果的重复记录,并将它们去掉,只保留唯一的记录。而group by关键词则用于将结果集按照某些列的值进行分组,将相同的记录聚合到一起,并对每个组进行统计分析。 当这两个关键词组合使用时,它们可以帮助我们以下两个方面: 1. 查找唯一组的结果: 假设我们有一个销售表,其记录了每一个订单的详细信息,包括订单号、客户名称、产品名称和销售数量等信息。如果我们想要得到每个客户的总销售数量,应该怎么做呢? 通过使用group by关键词对客户名称进行分组,然后使用聚合函数sum统计每个组的总销售数量即可: SELECT customer_name, sum(sales_quantity) FROM sales_table GROUP BY customer_name 但是这个结果集可能会包含重复的顾客名称,这时我们就需要使用distinct关键词将其去重: SELECT DISTINCT customer_name, sum(sales_quantity) FROM sales_table GROUP BY customer_name 这样,我们就得到了每个唯一客户的总销售数量。 2. 对结果分组后再去重: 假设我们有一个员工表,其记录了每个员工的姓名、部门、岗位和薪资等信息。如果我们想要得到每个部门、每个岗位的平均薪资,应该怎么做呢? 通过使用group by关键词对部门和岗位进行分组,然后使用聚合函数avg统计每个组的平均薪资即可: SELECT department, position, avg(salary) FROM employee_table GROUP BY department, position 但是这个结果集可能会包含重复的记录,因为一个员工可能同时属于多个部门或担任多个岗位。这时我们就需要先将结果按照部门和岗位分组,然后再使用distinct关键词将其去重: SELECT DISTINCT department, position, avg(salary) FROM employee_table GROUP BY department, position 这样,我们就得到了每个唯一部门、唯一岗位的平均薪资。 总之,distinctgroup by组合使用,不仅可以去重和分组,还可以实现更加复杂的查询和分析,帮助我们从数据提取有用的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值