SQL--特殊场景SQL整理

1 场景:对指定的字段进行分组,用GROUP_CONCAT对另外的一个字段进行连接,但是需要保证去重,
构造数据如下:
在这里插入图片描述

SELECT GROUP_CONCAT(DISTINCT password SEPARATOR ';') 
FROM user 
GROUP BY name

查询结果:
在这里插入图片描述
有两个password为123,但是在结果中只有一个123,做到了去重的效果。
参考博客:https://blog.csdn.net/bestlove12345/article/details/54575961

2 场景:一个字段中有多个标签,标签用逗号分隔,需要得到所有不重复的标签转为行
在这里插入图片描述
SQL:

SELECT
          DISTINCT substring_index(substring_index( run.result_label,',',b.help_topic_id + 1),',' ,- 1) AS result_label
        FROM
          tb_ucpaas_task_run_319 AS run
        JOIN mysql.help_topic b ON b.help_topic_id < (length(run.result_label) - length(replace (run.result_label, ',', '')) + 1)

得到如下结果:
在这里插入图片描述
分析:
以如下SQL为例:

SELECT 
    SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num 
FROM 
    mysql.help_topic 
WHERE 
    help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1

得到有多少个字符串,即得help_topic_id最大不能大于的值,SELECT中里层

SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1

得到从左开始一直待到第几个字符串的大字符串,外层得到最后一个字符,即为依次得到每一个字符串。
参考:https://blog.csdn.net/pjymyself/article/details/81668157

count和sum根据条件进行统计
在这里插入图片描述

select count(if(num=3,1,null)),sum(if(num=3,num,0)) from t_count_sum

返回结果
在这里插入图片描述
参考:https://blog.csdn.net/qq_39629277/article/details/90754444

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值