博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL--特殊场景SQL整理
阅读量:2351 次
发布时间:2019-05-10

本文共 1293 字,大约阅读时间需要 4 分钟。

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

你可能感兴趣的文章
Docker快速部署Redis
查看>>
Spring boot shiro session cache ecache redis 共存配置
查看>>
一看就懂的设计模式--设计模式分类
查看>>
一看就懂的设计模式--模板方法
查看>>
一看就懂的设计模式--享元模式
查看>>
一看就懂的设计模式--策略模式
查看>>
spring Cloud 组建图
查看>>
腾讯云
查看>>
什么服务器比较好?
查看>>
阿里云+腾讯云采购季优惠攻略
查看>>
PCB设计容易出错的地方都有哪些?
查看>>
挠性电路板和刚性电路板的区别,以及柔性电路板焊接方法操作步骤
查看>>
如何做好一块PCB板,大神从以下几个方面做了论述
查看>>
学习笔记1之static
查看>>
学习笔记2之继承
查看>>
循环链表实现增、删、改、查等功能
查看>>
Android实现超链接和跑马灯
查看>>
实现二叉树先序、中序、后序遍历
查看>>
Socket客户端服务器连接
查看>>
简单字符设备驱动程序的操作步骤
查看>>