最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql中函数IF,GROUP_CONCAT的使用_MySQL

来源:动视网 责编:小采 时间:2020-11-09 18:23:03
文档

mysql中函数IF,GROUP_CONCAT的使用_MySQL

mysql中函数IF,GROUP_CONCAT的使用_MySQL:bitsCN.com mysql中函数IF,GROUP_CONCAT的使用 mysql中最近用到的函数,记录下 1、IF(expr1,expr2,expr3)与我们常用的三目运算类似。expr1是一个表达式,如果TRUE,返回expr2否则为expr3如下数据:Sql代码 INSERT INTO a(id,a,b
推荐度:
导读mysql中函数IF,GROUP_CONCAT的使用_MySQL:bitsCN.com mysql中函数IF,GROUP_CONCAT的使用 mysql中最近用到的函数,记录下 1、IF(expr1,expr2,expr3)与我们常用的三目运算类似。expr1是一个表达式,如果TRUE,返回expr2否则为expr3如下数据:Sql代码 INSERT INTO a(id,a,b


bitsCN.com


mysql中函数IF,GROUP_CONCAT的使用

mysql中最近用到的函数,记录下

1、IF(expr1,expr2,expr3)与我们常用的三目运算类似。expr1是一个表达式,如果TRUE,返回expr2否则为expr3

如下数据:

Sql代码

INSERT INTO a(id,a,b) VALUES ('1', '1', '1');

INSERT INTO a(id,a,b) VALUES ('2', '1', '0');

INSERT INTO a(id,a,b) VALUES ('3', '1', '0');

INSERT INTO a(id,a,b) VALUES ('4', '1', '0');

INSERT INTO a(id,a,b) VALUES ('5', '0', '0');

INSERT INTO a(id,a,b) VALUES ('6', '0', '1');

比如要查询a的返回状态,1代表是,0代表否有:

Sql代码

SELECT IF(a=1,'是','否') as flag FROM a

有时需要比较两列数据,如同时比较a、b其取值通过(1,1),(1,0),(0,1),(0,0)来统计:

Java代码

SELECT

SUM(IF (a=1 AND b= 1, 1, 0)) as flag1,

SUM(IF (a=1 AND b= 0, 1, 0)) as flag2,

SUM(IF (a=0 AND b= 1, 1, 0)) as flag3,

SUM(IF (a=0 AND b= 0, 1, 0)) as flag4

FROM a

Java代码

1 3 1 1

这样就完成了按照类型来统计。

2、GROUP_CONCAT将一组数据中的non-NULL作为串联的字符串返回,常与group在一起使用。简单的说就是行转列,如下数据:

Sql代码

INSERT INTO `table2(id, a)` VALUES ('1', '0');

INSERT INTO `table2(id, a)` VALUES ('1', '1');

INSERT INTO `table2(id, a)` VALUES ('2', '0');

INSERT INTO `table2(id, a)` VALUES ('2', '3');

INSERT INTO `table2(id, a)` VALUES ('1', '4');

这里需要返回

Sql代码

id a

-----------

1 |0,1,4

2 |0,3

那么我们可以通过该函数来获取

Sql代码

SELECT id, GROUP_CONCAT(a)

FROM table2

GROUP BY id;

来看看GROUP_CONCAT语法:

Sql代码

GROUP_CONCAT([DISTINCT] expr [,expr ...]

[ORDER BY {unsigned_integer | col_name | expr}

[ASC | DESC] [,col_name ...]]

[SEPARATOR str_val])

参考该函数的doc :可以DISTINCT去重, ORDER BY排序,SEPARATOR 来指定分隔符(默认为“,”)如有下面数据

Java代码

INSERT INTO `table2(id, a)` VALUES ('1', '0');

INSERT INTO `table2(id, a)` VALUES ('1', '1');

INSERT INTO `table2(id, a)` VALUES ('2', '0');

INSERT INTO `table2(id, a)` VALUES ('2', '3');

INSERT INTO `table2(id, a)` VALUES ('1', '4');

INSERT INTO `table2(id, a)` VALUES ('2', '3');

我们需要显示出来的按照a降序、不能重复:

Sql代码

SELECT id, GROUP_CONCAT(DISTINCT a ORDER BY a DESC SEPARATOR '-')

FROM table2

GROUP BY id;

这样输出结果:

Sql代码

id a

-----------------------

1 4-1-0

2 3-0

有了这个函数我们就可以处理一些业务上的事情了,比如现在有两张表其中一张table3的id一对多与另一张表table4的rid关联,现在要统计ipad和mac的具体版本,那么我们就可以直接用sql实现了

Java代码

-- table3(id, name)

INSERT INTO `table3(id, name)` VALUES ('1', 'ipad');

INSERT INTO `table3(id, name)` VALUES ('2', 'mac');

-- table4(id, rid, name)

INSERT INTO `table4(id, rid, name)` VALUES ('1', '1', 'ipad1');

INSERT INTO `table4(id, rid, name)` VALUES ('2', '1', 'ipad2');

INSERT INTO `table4(id, rid, name)` VALUES ('3', '1', 'ipad3');

INSERT INTO `table4(id, rid, name)` VALUES ('4', '2', 'pro');

INSERT INTO `table4(id, rid, name)` VALUES ('5', '2', 'air');

INSERT INTO `table4(id, rid, name)` VALUES ('6', '2', 'mini');

Sql代码

SELECT

a.id,

a.name,

GROUP_CONCAT(b.name) as version

FROM table3 a JOIN table4 b ON a.id = b.rid

GROUP BY a.id;

---

id name version

1 ipad ipad1,ipad2,ipad3

2 mac pro,air,mini

注意事项:

1、连接的长度受group_concat_max_len参数,也就是说这个返回这个长度不是所有都会返回,但是默认为1024也很长了,当然具体可能会到当前concat字段的类型同时和max_allowed_packet的

2、连接返回二进制和非二进制string,依赖当前连接的类型。有可能超过512个后就返回TEXT或BLOB。如果连接的是int或其他最好先转成Char,如使用函数CAST(expr AS type), CONVERT(expr,type),见CAST文档

Java代码

-- CAST

SELECT CAST(id as CHAR) FROM table4;

-- Convert

SELECT Convert(id, CHAR) FROM table4;

bitsCN.com

文档

mysql中函数IF,GROUP_CONCAT的使用_MySQL

mysql中函数IF,GROUP_CONCAT的使用_MySQL:bitsCN.com mysql中函数IF,GROUP_CONCAT的使用 mysql中最近用到的函数,记录下 1、IF(expr1,expr2,expr3)与我们常用的三目运算类似。expr1是一个表达式,如果TRUE,返回expr2否则为expr3如下数据:Sql代码 INSERT INTO a(id,a,b
推荐度:
标签: 记录 的使用 函数
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top