sql针对某字段中的内容去重

之前在工作中使用遇到的一些问题,下面把这些情况给简单分享一下,不多说,直接上问题。

1.问题背景

将上图数据效果转化为下图效果效果

manager
["aa","aa","aa","bb","bb"]
["cc","cc","dd"]
["1","2","1","2","3"]
manager
aa,bb
cc,dd
1,2,3

2.实现思路

  • 第一步使用lateral explode()函数侧视图打开manager列
  • 第二步使用wm_concat()函数结合 group by 去重数据

3.代码实现

        select approvalid
        ,subProductTag
        ,regexp_replace(wm_concat(distinct managers,','),'"','')as manager
        from (
            SELECT approvalid
            ,subProductTag
            ,managers
            FROM (SELECT approvalid,subproducttag,manager FROM a WHERE ftime = %(dateFrom)s)tmp
                lateral view explode(split(substr(manager,2,length(manager)-2),','))tmp1 as managers)
        group by approvalid,subProductTag

4.总结

整体思路是使用先展开再聚合,如果有其他更好的实现方法,欢迎在下方评论区说出你的思路!

 

### SQL 查询中如何统计某个字段后的数量 为了统计某一字段去除复值之后的数量,可以采用 `COUNT(DISTINCT column_name)` 的形式来构建查询语句。这种方法直接针对目标字段进行唯一性处理,并计算其结果集中不同的值数目。 例如,在学生表 `students` 中想要知道性别(gender)这一栏位除相同项目后剩余几种分类时,就可以这样写SQL命令[^1]: ```sql SELECT COUNT(DISTINCT gender) AS distinct_gender_count FROM students; ``` 这条指令会返回student表格里面gender列的不同种类总数作为一个叫作distinct_gender_count的新字段呈现给使用者查阅。 另外需要注意的是当遇到NULL值的时候DISTINCT关键也会将其视为独立的一个实体来进行考量除非特别指明忽略它之外一般情况下都会被计入最终的结果集合之中所以如果原始资料中有若干笔记录包含了NULL作为特定字段内容那么经过DISTINCT运算之后依旧只会算做一个唯一的实例存在而不会因为它是缺失数据就自动排除在外[^2]. 还有更为复杂的场景下,如果我们不仅仅局限于单一属性上的差异判定而是扩展至组合键层面即考虑由两个甚至更多个要素共同决定的一组对象之间是否存在复情形的话则需要用到嵌套子查询配合GROUP BY以及HAVING等高级特性一起来达成目的正如下面这个例子所示用于识别vitae表里peopleId与seq两部分联合起来形成的整体是否有冗余状况发生并且剔除掉其中最早出现的那一项保留其余副本以便后续进一步分析研究[^3]: ```sql SELECT * FROM vitae a WHERE (a.peopleId,a.seq) IN ( SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING COUNT(*) > 1 ) AND rowid NOT IN ( SELECT MIN(rowid) FROM vitae GROUP BY peopleId, seq HAVING COUNT(*)>1 ); ``` 以上就是关于怎样利用标准SQL语法结构有效地完成对指定栏目实施消除复元素后再加以计数操作的相关介绍希望能够帮助大家更好地理解和掌握这项技能从而灵活应用于各种实际开发工作中解决相应的问题提高工作效率减少不必要的麻烦。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值