php---分组函数group_concat()

group_concat()函数总结

group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。
比较抽象,难以理解。

通俗点理解,其实是这样的:group_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函

数参数(就是字段名)决定。分组必须有个标准,就是根据group by指定的列进行分组。

group_concat函数应该是在内部执行了group by语句,这是我的猜测。

1.测试语句:SELECT group_concat(town) FROM `players` group by town

结果去查找town中去查找哪些值是一样的,如果相等,就全部列出来,以逗号分割进行列出,如下:

group_concat(town)
 
北京,北京
长沙

2.测试:SELECT group_concat( town )
FROM players
结果:
group_concat(town)
长沙,北京,北京,

上面是否可以证明,group_concat只有与group by语句同时使用才能产生效果? 下面进行了实际测验

3.测试常量对group_concat()的配置影响:
SET @@GROUP_CONCAT_MAX_LEN=4
手册中提到设置的语法是这样的:
SET [SESSION | GLOBAL] group_concat_max_len = val;

两种有什么区别?

SET @@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;

4.使用语句 SELECT group_concat(town) FROM `players`。结果得到:
group_concat(town)
长沙,北京,长沙,北京
结论:group_concat()函数需要与group by语句在一起使用,才能得到需要的效果。
原因可以这样理解:group_concat()得到是属于x组的所有成员(函数里面列参数指定需要显示哪些字段)。x组从哪里来?如

果没有group by进行指定,那么根本不知道group_concat()根据哪个分组进行显示出成员。 所以,像上面没有group by子句

的时候,就显示了长沙和北京。

实际中什么时候需要用到这个函数?
假如需要查询的结果是这样:左边显示组名,右边想显示该组别下的所有成员信息。用这个函数,就可以省去很多事情了。

另外,假如我这样使用:SELECT group_concat( name, sex ) FROM `players` town。意义不大。group_concat()指定一个

列是最好的情况。如果指定了多个列。那么显示结果类似这样:

group_concat(name,sex)
王滔,王小明男,刘惠女,舒明女

时间: 2024-07-29 23:20:49

php---分组函数group_concat()的相关文章

数据库SQL的分组函数

分组函数:(五个) 1···max(expr):求expr的最大值 }\ 2···min(expr):求expr的最小值 }-- 数据类型是有规定的 3···sum(expr):求expr的总和 }-- 必须是字符型或数字 4···avg(expr):求expr的平均值 }/ 5···count(expr):求expr的个数 expr的类型不能是空,如果是空,则不计入其中, 因此需要用到nvl()来进行转换 group by expr1,expr2,...的用法: group by 的后面跟的是

Day05 分组函数

1. 什么是分组函数 2. 组函数语法 3. 分组数据 4. 非法使用组函数 5. 过滤分组

ORACLE分组函数stddev和variance,我心存的疑问

方差函数VARIANCE(x),具体方法是: 设方差s,a为x1,x2...xn的平均值 ,则s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+--(xn-a)^2]/n 标准差函数STDDEV(x),具体算法是: 方差开方.设标准查为& ,则 &^2 = s 但是我通过以下的实验,发现oracle是这样计算variance()的, s = [(x1-a)^2+(x2-a)^2+(x3-a)^2+--(xn-a)^2]/n-1 ,注意不是除以n,而是n-1 ---------

ORA-00937:不是单组分组函数_Oracle

Demo: 1 SELECT USER_ID, 2 USER_NAME, 3 USER_SEX, 4 MAX(USER_AGE), 5 SUM(USER_MONEY) AS USER_MONEY 6 USER_TEL, 7 USER_EMAIL, 8 USER_ADD, 9 USER_STATUS, 10 FROM USERS 11 ORDER BY USER_NAME, USER_SEX, USER_STATUS; 12 类似这种,多个字段的GROUP BY该怎么写. 1.USER_TEL, 

Oracle之分组函数嵌套以及表连接

--1 数据环境准备 scott 用户下面的emp,dept表 --2 要求 :求平均工资最高的部门编号,部门名称,部门平均工资 select d.deptno,d.dname,e.salfrom(select avg(sal) sal,deptnofrom emp egroup by deptnohaving avg(sal) = (select max(avg(sal)) from emp group by deptno))eleft join dept don e.deptno=d.dep

17.07.29 分组函数 多表连接 子查询

分组函数: 将得到的原始数据进行进一步的处理 count 对非空的数值做统计 只有 count(*) 不去除空值 处理过程: select      From from where group by sum having

Oracle基本语法&&函数&&子查询&&分页查询&&排序&&集合操作&&高级分组函数

一.  数据库 手工---文件管理---数据库 DB:Database 数据库. DBMS:管理数据库的软件.(oracle) 主流关系数据库: 1.      Oracle 2.      DB2 3.      SQL Server 基本没人使 4.      MySQL  基本没人用,免费 Linux 开源,可以发现漏洞补上 Windows服务器会有补丁,数据易泄漏 eclipse 日食 数据表(Table): 表的行(Row):记录 表的列(Column):字段 二.  关系型数据库 一

Oracle学习(4):分组函数

分组函数 什么是分组函数? 分组函数作用于一组数据,并对一组数据返回一个值 组函数的类型 lAVG lCOUNT lMAX lMIN lSUM 数值求和 SQL> --求员工工资总额 SQL> select sum(sal) from emp; SUM(SAL) ---------- 29025 求数据条数 SQL> --求员工的人数 SQL> select count(*)from emp; COUNT(*) ---------- 14 求平均 SQL> --平均工资 SQ

关于mysql函数GROUP_CONCAT

GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat. 语法: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC |DESC]