日期:2014-05-16 浏览次数:20780 次
GROUP BY
子句一起使用的函数如果你在不包含GROUP BY
子句的一个语句中使用聚合函数,它等价于聚合所有行。
COUNT(expr)
SELECT
语句检索出来的行的非NULL
值的数目。
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;
COUNT(DISTINCT expr,[expr...])
mysql> select COUNT(DISTINCT results) from student;
在MySQL中,你可以通过给出一个表达式列表以得到不同的表达式组合的数目。在 ANSI
SQL中,你可能必须在CODE(DISTINCT ..)
内进行所有表达式的连接。
AVG(expr)
expr
的平均值。
mysql> select student_name, AVG(test_score) from student GROUP BY student_name;
MIN(expr)
MAX(expr)
expr
的最小或最大值。MIN()
和MAX()
可以有一个字符串参数;在这种的情况下,他们返回最小或最大的字符串值。
mysql> select student_name, MIN(test_score), MAX(test_score) from student GROUP BY student_name;
SUM(expr)
expr
的和。注意,如果返回的集合没有行,它返回NULL!
STD(expr)
STDDEV(expr)
expr
标准差(deviation)。这是对 ANSI SQL
的扩展。该函数的形式STDDEV()
是提供与Oracle的兼容性。
BIT_OR(expr)
expr
里所有位的位或。计算用 64 位(BIGINT
)精度进行。
BIT_AND(expr)
expr
里所有位的位与。计算用 64 位(BIGINT
)精度进行。 MySQL扩展了GROUP BY
的用法。你可以不出现在的GROUP
BY
部分的SELECT
表达式中使用列或计算,这表示这个组的任何可能值。你可以使用它是性能更好,避免在不必要的项目上排序和分组。例如,你在下列查询中不需要在customer.name
上聚合:
mysql> select order.custid,customer.name,max(payments) from order,customer where order.custid = customer.custid GROUP BY order.custid;
在 ANSI SQL中,你将必须将customer.name
加到GROUP
BY
子句。在MySQL中,名字是冗余的。
如果你从GROUP BY
部分省略的列在组中不是唯一的,不要使用这个功能。
在某些情况下,你可以使用MIN()
和MAX()
获得一个特定的列值,即使它不是唯一的。下例给出从包含sort
列中最小值的行的column
值:
substr(MIN(concat(sort,space(6-length(sort)),column),7,length(column)))
注意,如果你正在使用MySQL
3.22(或更早)或如果你正在试图遵从ANSI SQL,你不能在GROUP BY
或ORDER
BY
子句中使用表达式。你可以通过使用表达式的一个别名解决此限制:
mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name GROUP BY id,val ORDER BY val;
在MySQL
3.23中,你可以这样做:
mysql> SELECT id,FLOOR(value/100) FROM tbl_name ORDER BY RAND();
CREATE DATABASE
句法CREATE DATABASE db_name
CREATE DATABASE
用给定的名字创建一个数据库。允许的数据库名字规则在7.1.5
数据库、桌子、索引、列和别名命名中给出。如果数据库已经存在,发生一个错误。
在MySQL中的数据库实现成包含对应数据库中表的文件的目录。因为数据库在初始创建时没有任何表,CREATE
DATABASE
语句只是在MySQL数据目录下面创建一个目录。
你也可以用mysqladmin
创建数据库。见12.1 不同的MySQL程序的概述。
DROP
DATABASE
句法DROP DATABASE [IF EXISTS] db_name
DROP DATABASE
删除数据库中的所有表和数据库。要小心地使用这个命令!
DROP
DATABASE
返回从数据库目录被删除的文件的数目。通常,这3倍于表的数量,因为每张表对应于一个“.MYD”文件、一个“.MYI”文件和一个“.frm”文件。
在MySQL 3.22或以后版本中,你可以使用关键词IF
EXISTS
阻止一个错误的发生,如果数据库不存在。
你也可以用mysqladmin
丢弃数据库。见12.1 不同的 MySQL 程序的概述。
CREATE
TABLE