专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »数据库 » mysql日期函数:MySQL高级特性的集合函数 »正文

mysql日期函数:MySQL高级特性的集合函数

来源: 发布时间:星期二, 2009年1月6日 浏览:2次 评论:0
="t18">到现在为止你只学习了如何根据特定条件从表中取出条或多条记录但是假如你想对个表中记录进行数据统计例如如果你想统计存储在表中次民意测验投票结果或者你想知道个访问者在你站点上平均花费了多少时间要对表中任何类型数据进行统计都需要使用集合你可以统计记录数目平均值最小值最大值或者求和当你使用个集合它只返回个数该数值代表这几个统计值的

这些最大特点就是经常和GROUP BY语句配合使用需要注意是集合不能和非分组列混合使用

行列计数

计算查询语句返回记录行数

直接计算COUNT(*)例如计算pet表中猫只数:

mysql>SELECT count(*) FROM pet WHERE species=’cat’;

+----------+

| count(*) |

+----------+

| 2 |

+----------+

统计字段值数目

例如计算pet表中species列数目:

mysql> SELECT count(species) FROM pet;

+----------------+

| count(species) |

+----------------+

| 9 |

+----------------+

如果相同种类出现了不止该种类将会被计算多次如果你想知道种类为某个特定值宠物有多少个你可以使用WHERE子句如下例所示:

mysql> SELECT COUNT(species) FROM pet WHERE species='cat' ;

注意这条语句结果:

+----------------+

| COUNT(species) |

+----------------+

| 2 |

+----------------+

这个例子返回种类为'cat'作者数目如果这个名字在表pet中出现了两次则次返回值是2 而且它和上面提到过语句结果是:

SELECT count(*) FROM pet WHERE species=’cat’

实际上这两条语句是等价

假如你想知道有多少区别种类宠物数目你可以通过使用关键字DISTINCT来得到该数目如下例所示:

mysql> SELECT COUNT(DISTINCT species) FROM pet;

+-------------------------+

| COUNT(DISTINCT species) |

+-------------------------+

| 5 |

+-------------------------+

如果种类'cat'出现了不止它将只被计算关键字DISTINCT 决定了只有互不相同值才被计算

通常当你使用COUNT()时字段中空值将被忽略

另外COUNT通常和GROUP BY子句配合使用例如可以这样返回每种宠物数目:

mysql> SELECT species,count(*) FROM pet GROUP BY species;

+---------+----------+

| species | count(*) |

+---------+----------+

| bird | 2 |

| cat | 2 |

| dog | 3 |

| hamster | 1 |

| snake | 1 |

+---------+----------+

计算字段平均值

需要计算这些值平均值使用AVG()你可以返回个字段中所有值平均值

假如你对你站点进行次较为复杂民意调查访问者可以在1到10的间投票表示他们喜欢你站点程度你把投票结果保存在名为voteINT型字段中要计算你用户投票平均值你需要使用AVG():

SELECT AVG(vote) FROM opinion

这个SELECT语句返回值代表用户对你站点平均喜欢程度AVG()只能对数值型字段使用这个在计算平均值时也忽略空值

再给出个实际例子例如我们要计算pet表中每种动物年龄平均值那么使用AVG和GROUP BY子句:

mysql> SELECT species,AVG(CURDATE-birth) FROM pet GROUP BY species;

返回结果为:

+---------+----------------------+

| species | AVG(CURDATE-birth) |

+---------+----------------------+

| bird | 34160 |

| cat | 74959.5 |

| dog | 112829.66666667 |

| hamster | 19890 |

| snake | 49791 |

+---------+----------------------+

计算字段值

假设你站点被用来出售某种商品已经运行了两个月是该计算赚了多少钱时候了假设有个名为orders表用来记录所有访问者定购信息要计算所有定购量总和你可以使用SUM():

SELECT SUM(purchase_amount) FROM orders

SUM()返回值代表字段purchase_amount中所有值总和字段purchase_amount数据类型也许是DECIMAL类型但你也可以对其它数值型字段使用SUM()

个不太恰当例子介绍说明我们计算pet表中同种宠物年龄总和:

mysql> SELECT species,SUM(CURDATE-birth) FROM pet GROUP BY species;

你可以查看结果和前个例子对照:

+---------+----------------------+

| species | SUM(CURDATE-birth) |

+---------+----------------------+

| bird | 68320 |

| cat | 149919 |

| dog | 338489 |

| hamster | 19890 |

| snake | 49791 |

+---------+----------------------+

计算字段值极值

求字段极值涉及两个MAX和MIN

例如还是pet表你想知道最早动物出生日期由于日期最早就是最小所以可以使用MIN:

mysql> SELECT MIN(birth) FROM pet;

+------------+

| MIN(birth) |

+------------+

| 1989-05-13 |

+------------+

但是你只知道了日期还是无法知道是哪只宠物你可能想到这样做:

SELECT name,MIN(birth) FROM pet;

但是这是SQL语句集合不能和非分组列混合使用这里name列是没有分组所以你无法同时得到name列值和birth极值

MIN同样可以和GROUP BY子句配合使用例如找出每种宠物中最早出生日期:

mysql> SELECT species,MIN(birth) FROM pet GROUP BY species;

下面是令人满意结果:

+---------+------------+

| species | MIN(birth) |

+---------+------------+

| bird | 1997-12-09 |

| cat | 1993-02-04 |

| dog | 1989-05-13 |

| hamster | 1999-03-30 |

| snake | 1996-04-29 |

+---------+------------+

方面如果你想知道最近出生日期就是日期最大值你可以使用MAX如下例所示:

mysql> SELECT species,MAX(birth) FROM pet GROUP BY species;

+---------+------------+

| species | MAX(birth) |

+---------+------------+

| bird | 1998-09-11 |

| cat | 1994-03-17 |

| dog | 1990-08-31 |

| hamster | 1999-03-30 |

| snake | 1996-04-29 |

+---------+------------+

整理总结

在本节中介绍了些典型集合使用方法包括计数、均值、极值和总和这些都是SQL语言中非常常用

这些的所以称的为集合它们应用在多条记录中所以集合最常见使用方法就是和GROUP BY子句配合使用最重要是集合不能同未分组列混合使用

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: