精华内容
下载资源
问答
  • 引言今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢?学习时间首先我们准备...

    引言

    今天我们来说一个MySQL查询的例子,比如有一个统计需求, 分组后的数据,我们知道只能使用聚合函数进行统计, 那如果要根据分组约定,将一系列的值合并到单个字段显示出来, 应该怎么写呢?

    348dcc93ee3bc9dfd7b79d6862781025.png

    学习时间

    首先我们准备数据,有一个用户喜好表,记录了用户的喜好。比如这样:

    SELECT hobbies FROM peoples_hobbies WHERE person_id = 5; 

    结果很多行数据:

    shopping
    fishing
    coding 

    那么问题来了,如果需要的输出类似于

    shopping, fishing, coding 

    一行展示就够了,不要多行展示,应该怎么写呢?或者说MySQL有没有这个能力处理呢?

    当然是有的。MySQL贴心地给出了 GROUP_CONCAT 函数,用于使用分隔符连接多行字段的值。 比如说按照 person_id 进行分组,然后第二列输出用户喜好,使用逗号分隔符:

    SELECT person_id, GROUP_CONCAT(hobbies SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 

    当然了,peoples_hobbies 表完全有可能在 hobbies 字段有重复的值,我们也可以进行唯一性筛选。 把上述SQL语句改造一下:

    SELECT person_id, GROUP_CONCAT(DISTINCT hobbies SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 

    写到这里基本上已经可以满足使用了。可是我们还可以再进一步。 比如对我们的输出字段进行排序后再使用分隔符连接。

    SELECT person_id, GROUP_CONCAT(hobbies ORDER BY hobbies ASC SEPARATOR ', ') AS all_hobbies FROM peoples_hobbies GROUP BY person_id; 

    MySQL默认的单行字符数是1024,如果连接过多字段导致超出长度限制的,可以在查询之前修改变量:

    SET group_concat_max_len = 2048; 

    有的同学会说了,这次查询你改成2048,勉强过关,随着时间的增长,数据量也在增长, 这个字符串长度也是动态的,能不能自动计算出来, 省的我们每次都要重新设置,重新计算,毕竟在查询之前,谁也不知道会有多少数据出来。 当然,MySQL提供的几个简单函数,就可以轻而易举地实现。

    SET group_concat_max_len = CAST((SELECT SUM(LENGTH(hobbies)) + COUNT(*) * LENGTH(', ') FROM peoples_hobbies GROUP BY person_id) AS UNSIGNED); 

    实时计算返回的字段长度值,实时修改限制变量值,是不是轻松了许多!

    写在最后

    今天通过一个示例,给大家展示了MySQL内置函数 group_concat 的用法,相信下次遇到要把多行合并为一行的需求, 你也能够轻松搞定了。

    Happy coding :-)

    我是@程序员小助手,持续分享编程知识,欢迎关注。
    展开全文
  • labelSeparator :':',//分隔符 items : { xtype : 'grid', width: 400, height: 140, autoScroll: true, trackMouseOver:false, sm:sm...
  •  labelSeparator :':',//分隔符  height : 100,  frame : true,  width : 350,  items : [  new Ext.form.ComboBox({  fieldLabel:'combo',  displayField:'item',  valueField:'value', ...
  • 举个例子: '赵','1234' '钱','2345''孙','3456' '李','4567''周','56 78' ...这是我文件里的内容,一共是五条数据: ...现在我想这些数据准确的读取出来并插入数据库,请问大家在读取这个地方该怎么编写
  • 然后跳到第一章的末尾,菜单栏上选“插入︱分隔符”,分节符类型选“下一页”,不要选“连续”(除非你想第二章的标题放在第一章的文字后面而不是另起一页),若是奇偶页排版根据情况选“奇数页”或“偶数页”。...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    然后根据实际的机器环境它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char*p1,p2;我在使用p2的...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    4.7 我有些解析外部结构的代码,但是它却崩溃了,显示出了“unaligned access”(未对齐的访问)的信息。这是什么意思? 47 作为函数参数的指针 47 4.8 我有个函数,它应该接受并初始化一个指针:void f(int *ip)...
  • o 3.17 有什么容易的显示枚举值符号的方法? * 4. 表达式 o 4.1 为什么这样的代码: a[i] = i++; 不能工作? o 4.2 使用我的编译器,下面的代码 int i=7; printf("%d\n", i++ * i++); 返回 49?不管按什么顺序...
  • 然后根据实际的机器环境它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 2  1.4 新的64位机上的64位类型是什么样的? 3 指针声明 3 1.5 这样的声明有什么问题?char *p1, p2; 我...
  • javascript函数的解释

    2011-02-26 11:03:52
    58.innerTEXT的值和上面的一样,只不过不会这种标记显示出来. 59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态. 60.isDisabled判断是否为禁止状态.disabled设置禁止状态 61....
  • 你必须知道的495个C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    2.17 有什么容易的显示枚举值符号的方法? . . . . . . . . . . . . . . . 11 3 表达式13 3.1 为什么这样的代码: a[i] = i++; 不能工作? . . . . . . . . . . . . 13 3.2 使用我的编译器,下面的代码int i=7; printf...
  • -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel...
  • ExtAspNet_v2.3.2_dll

    2010-09-29 14:37:08
    -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid...
  • JAVA 正则表达式

    热门讨论 2010-01-15 11:16:37
    * 显示输出信息 * @param out */ public void print (PrintStream out) { Iterator elements = files.iterator(); while (elements.hasNext()) { File file=(File) elements.next(); out.println(file....
  • 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • 最新Java面试宝典pdf版

    热门讨论 2011-08-31 11:29:22
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • Java面试宝典-经典

    2015-03-28 21:44:36
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • Java面试宝典2010版

    2011-06-27 09:48:27
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 2、编写一个程序,将d:\java目录下的所有.java文件复制到d:\...
  • SQL语法大全

    2014-03-30 11:00:11
    sql="insert into 目标数据表 select * from 源数据表" (源数据表的记录添加到目标数据表) (5) 数据记录统计函数: AVG(字段名) 得出一个表格栏平均值 COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据...
  • Java面试宝典2012版

    2012-12-03 21:57:42
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到...
  • java面试宝典2012

    2012-12-16 20:43:41
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 67 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • 1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • Java面试笔试资料大全

    热门讨论 2011-07-22 14:33:56
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • Java面试宝典2012新版

    2012-06-26 19:20:00
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...
  • JAVA面试宝典2010

    2011-12-20 16:13:24
    1、编写一个程序,将a.txt文件中的单词与b.txt文件中的单词交替合并到c.txt文件中,a.txt文件中的单词用回车符分隔,b.txt文件中用回车或空格进行分隔。 61 2、编写一个程序,将d:\java目录下的所有.java文件复制到d...

空空如也

空空如也

1 2
收藏数 39
精华内容 15
关键字:

怎么把分隔符显示出来