本章论述了用于一组数值操作的 group (
集合)
函数。除非另作说明,
group
函数会忽略 NULL
值。
假如你在一个不包含 ROUP BY
子句的语句中使用一个 group
函数
,它相当于对所有行进行分组。
返回expr
的平均值。 DISTINCT
选项可用于返回 expr
的不同值的平均值。
若找不到匹配的行,则AVG()
返回 NULL
。
mysql> SELECT student_name, AVG(test_score)
-> FROM student
-> GROUP BY student_name;
返回expr
中所有比特的 bitwise AND
。计算执行的精确度为64
比特(BIGINT)
。
若找不到匹配的行,则这个函数返回 18446744073709551615
。(
这是无符号 BIGINT
值,所有比特被设置为
1
)。
返回expr
中所有比特的bitwise
OR
。计算执行的精确度为64
比特(BIGINT)
。
若找不到匹配的行,则函数返回 0
。
返回expr
中所有比特的bitwise
XOR
。计算执行的精确度为64
比特(BIGINT)
。
若找不到匹配的行,则函数返回 0
。
返回SELECT
语句检索到的行中非NULL
值的数目。
若找不到匹配的行,则COUNT()
返回 0
。
mysql> SELECT student.student_name,COUNT(*)
-> FROM student,course
-> WHERE
student.student_id=course.student_id
-> GROUP BY student_name;
COUNT(*)
的稍微不同之处在于,它返回检索行的数目, 不论其是否包含
NULL
值。
SELECT
从一个表中检索,而不检索其它的列,并且没有 WHERE
子句时,
COUNT(*)
被优化到最快的返回速度。例如:
mysql> SELECT COUNT(*) FROM student;
这个优化仅适用于 MyISAM
表,
原因是这些表类型会储存一个函数返回记录的精确数量,而且非常容易访问。
对于
事务型的存储引擎
(InnoDB,
BDB),
存储一个精确行数的问题比较多,原因是可能会发生多重事物处理,
而每个都可能会对行数产生影响。
- COUNT(DISTINCT expr
,[expr
...])
返回不同的非NULL
值数目。
若找不到匹配的项,则COUNT(DISTINCT)
返回 0
。
mysql> SELECT COUNT(DISTINCT results) FROM
student;
在MySQL
中,
你通过给定一个表达式列表而获取不包含NULL
不同表达式组合的数目。在标准 SQL
中,
你将必须在COUNT(DISTINCT
...)
中连接所有表达式。
该函数返回带有来自一个组的连接的非NULL
值的字符串结果。其完整的语法如下所示:
GROUP_CONCAT([DISTINCT] expr
[,expr
...]
[ORDER BY {unsigned_integer
| col_name
|
expr
}
[ASC | DESC] [,col_name
...]]
[SEPARATOR str_val
])
mysql> SELECT student_name,
-> GROUP_CONCAT(test_score)
-> FROM student
-> GROUP BY student_name;
Or:
mysql> SELECT student_name,
-> GROUP_CONCAT(DISTINCT test_score
-> ORDER BY test_score DESC SEPARATOR '
')
-> FROM student
-> GROUP BY student_name;
在MySQL
中,
你可以获取表达式组合的连接值。你可以使用DISTINCT
删去重复值。假若你希望多结果值进行排序,则应该使用
ORDER BY
子句。若要按相反顺序排列,将 DESC (
递减)
关键词添加到你要用ORDER BY
子句进行排序的列名称中。默认顺序为升序;可使用ASC
将其明确指定。 SEPARATOR
后面跟随应该被插入结果的值中间的字符串值。默认为逗号
(
‘,
’)
。通过指定SEPARATOR ''
,你可以删除所有分隔符。
使用group_concat_max_len
系统变量,你可以设置允许的最大长度。
程序中进行这项操作的语法如下,其中 val
是一个无符号整数:
SET [SESSION | GLOBAL] group_concat_max_len = val;
若已经设置了最大长度, 则结果被截至这个最大长度。
- MIN([DISTINCT] expr
), MAX([DISTINCT] expr
)
返回
expr
的最小值和最大值。
MIN()
和
MAX()
的取值可以是一个字符串参数;在这些情况下, 它们返回最小或最大字符串值。请参见
7.4.5节,“MySQL如何使用索引”
。
DISTINCT
关键词可以被用来查找expr
的不同值的最小或最大值,然而,这产生的结果与省略DISTINCT
的结果相同。
若找不到匹配的行,MIN()
和MAX()
返回 NULL
。
mysql> SELECT student_name, MIN(test_score),
MAX(test_score)
-> FROM student
-> GROUP BY student_name;
对于MIN()
、 MAX()
和其它集合函数,
MySQL
当前按照它们的字符串值而非字符串在集合中的相关位置比较 ENUM
和 SET
列。这同ORDER
BY
比较二者的方式有所不同。这一点应该在MySQL
的未来版本中得到改善。
返回expr
的总体标准偏差。这是标准 SQL
的延伸。这个函数的STDDEV()
形式用来提供和Oracle
的兼容性。可使用标准SQL
函数 STDDEV_POP()
进行代替。
若找不到匹配的行,则这些函数返回 NULL
。
返回expr
的总体标准偏差(VAR_POP()
的平方根)
。你也可以使用 STD()
或STDDEV(),
它们具有相同的意义,然而不是标准的 SQL
。
若找不到匹配的行,则STDDEV_POP()
返回 NULL
。
返回expr
的样本标准差 (
VAR_SAMP()
的平方根)
。
若找不到匹配的行,则STDDEV_SAMP()
返回 NULL
。
返回expr
的总数。 若返回集合中无任何行,则 SUM()
返回NULL
。DISTINCT
关键词可用于 MySQL 5.1
中,求得expr
不同值的总和。
若找不到匹配的行,则SUM()
返回 NULL
。
返回expr
总体标准方差。它将行视为总体,而不是一个样本,
所以它将行数作为分母。你也可以使用 VARIANCE(),
它具有相同的意义然而不是 标准的
SQL
。
若找不到匹配的项,则VAR_POP()
返回NULL
。
返回expr
的样本方差。更确切的说,分母的数字是行数减去1
。
若找不到匹配的行,则VAR_SAMP()
返回NULL
。
返回expr
的总体标准方差。这是标准SQL
的延伸。可使用标准SQL
函数 VAR_POP()
进行代替。
若找不到匹配的项,则VARIANCE()
返回NULL
。
相关推荐
【GROUP_CONCAT】使用之MySQL官方文档翻译
wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/wmsys_wm_concat函数结果拆解/
本文通过实例介绍了MySQL中的group_concat函数的使用方法,需要的朋友可以适当参考下
GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是 逗号,即”,” , 如果需要自定义分隔符可以使用 SEPARATOR 如: SELECT GROUP_CONCAT(name SEPARATOR '_') FROM user 限制: GROUP_CONCAT...
wm_concat函数在oracle 10G以下版本是没有的,这个就需要我们自己来创建,有需要的就下载下来,直接运行就行了,如果在运行中出中,请分开运行,不要一次性运行哟
oracle 9i 实现wm_concat函数 进行一列多行合并,之间使用,分割
MySQL中group_concat函数,完整的语法如下: 代码如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator ‘分隔符’]) 基本查询 代码如下:select * from aa; 代码如下:+——+——+|...
在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就需要手工去修改 ...
Oracle 11g之后取消了wm_concat函数,12C及以后版本需要使用的话,需要自定义新建这个函数,提供DDL给需要用到的兄弟们。
重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件
本文实例讲述了mysql group_concat()函数用法。分享给大家供大家参考,具体如下: group_concat(),手册上说明:该函数返回带有来自一个组的连接的非NULL值的字符串结果。比较抽象,难以理解。 通俗点理解,其实是...
解决ORA-00904: "WMSYS"."WM_CONCAT": 标识符无效 在sqlplus中执行包里的owmctab.plb、owmaggrs.plb、owmaggrb.plb三个脚本即可。 简单来说,用PL/SQL执行下一下几个脚本就可以了。 特别要注意:PL/SQL登录时,要...
Oracle从12C版本开始,不支持wm_concat函数,我们可以采取的办法有使用listagg函数代替wm_concat函数,或者为了减小修改程序的工作量,可以通过手工创建wm_concat函数来解决这个问题。
2、用sqlplus登录:sqlplus -logon sys/123 as sysdba 3、执行@C:\Users\JOYTRAVEL\Desktop\WMSYS用户\owmaggrb.plb; 如果执行结果报错,说找不到WMSYS用户,那么执行 @C:\Users\JOYTRAVEL\Desktop\WMSYS用户\...
本文实例讲述了mysql中GROUP_CONCAT的使用方法。分享给大家供大家参考,具体如下: 现在有三个表,结构如下: cate表: CREATE TABLE `cate` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id', `...
语法: GROUP_CONCAT([DISTINCT] expr [,expr …][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name …]][SEPARATOR str_val]) 下面演示一下这个函数,先建立一个学生选课表...
大家用oracle数据库里面的wmsys.wm_concat函数有没有遇见过字符串缓冲区太小的情况? 针对这种情况我写了个自定义聚合函数 是clob版的。
Oracle新版中不支持 WM_CONCAT的处理方法,直接创建一个自定义函数代替