作为一个刚毕业进入这行的菜鸟,婶婶的觉的那种大神、大牛到底是怎样炼成的啊,我这小菜鸟感觉这TMD要学的东西这多啊,然后就给自己定了许多许多要学习的东西,可是有人又不停地给你灌输:东西不在多而要精通!我也觉得很有道理,可是怎样才能精通呢?封神之路,在哪里啊 !!!

  这一天没有一个安静的心,基本是学不进去了,发现自己还是太功利了,急功近利!也许你只要学就行,管他是否能够立即让人见识到你的厉害,技术和知识这种东西也许还是要强调一个 底蕴的。既然自己最烦那种看了两篇文章就给你扯淡的人,拿自己也许就该一样一样去积累吧,管它是否现在眼前能用到?闲着也没事,上网就是那么点事情,看看新闻、看看dota视频、玩两局dota,没事了那就学吧,也许就不该给自己定太多的时间计划表,这东西!呵呵、、、、真不是人能坚持的,还是本着反正也没事我就是看看,能学多少是多少,反正暂时也不用。这样一想自己好多了,来学篇博客,叨叨两句完了继续上路。

  这段时间一直在学习sql相关的知识,原来在大学只是有一点sqlserver的基础,上班了,这些东西真的不够用啊! 公司现在用的是postgreSQL,这个数据库不知道国内有多少公司在用,所以我还是先以mysql学习吧,再说了sql这种语言是统一标准的,各家的东西只是有细微不同而已。忽然中间看看自己做的学习笔记已经22页了,其实还好,在这里就不发所有的笔记了,挑点坐看弄明白的东西,一小块一小块的总结,发出来,这样看着就不会很累,太长的博客真的会吓的很多的人,除非那些工作中需要这块的知识;这样的总结对自己也是一件好事,以后看的时候光看题目就行,不用再一篇很长很长的文章中找,闲话不多说了!进入正题:sql中的五种聚集函数

  下面的笔记是我在看了 燕十八php第二部-⑤ MySQL从入门到精通视频教程 (46集全) 之后,自己又看了一些书,总结的sql聚集函数注意的地方,

  一、先给大家分享写 sql 的顺序:

    表->where(去除符合条件的行数据,此时烈没有变化)->符合条件的中间结果表-> 分组统计运算或者投影运算:max、min、count、avg、group by->上步得到的新的结果集,这时就有可能产生新的列->having(筛选结果)->order by(得到排序结果表)->limit(限制条目)->最终结果表

所以说where->group by->having->order by/limit  ,这个就是写sql语句时的顺序

  二、常用的5个聚集函数:

Max               求最大

Min                求最小

Sum               求总和

Avg                求平均

Count            计算总行数

  

      1、sum 和 avg的输入必须是数值集,但是其他的运算符可以作用在非数值数据类型的集合上,如字符串

      2、null  max、min、sum、avg都是忽略null的,而count(*)统计的行数包括null,count(column)忽略null的行

3、all/distinct   all是默认的也就是不写的情况下,distinct是统计值不相同的行;对于count(distinct *)是错误的,对count使用distinct必须指明列;对于max和min使用distinct也是没有意义的,虽然技术上可以实现sql语法没有错误,但是一个列的最大值和最小值无论是否包含不同值都是相同的、不影响的

4、牢记把列看成变量,那么聚合函数也可以这样使用在一些列计算中

      

mysql> select cat_id,sum(shop_price*goods_number)
-> from ecs_goods
-> group by cat_id;
+--------+------------------------------+
| cat_id | sum(shop_price*goods_number) |
+--------+------------------------------+
| 2 | 0.00 |
| 3 | 356235.00 |
| 4 | 6891.00 |
| 5 | 29600.00 |
| 8 | 4618.00 |
| 11 | 790.00 |
| 13 | 134.00 |
| 14 | 162.00 |
| 15 | 190.00 |
+--------+------------------------------+
9 rows in set (0.00 sec)

      

      5、特别记忆count 的两种使用方式;

count(*) 对表中行的数目进行统计,不管列中是否包含null值 还是非空值

count(column)  对特定列中具有值的行进行计数,忽略null的值。

应特别注意:

count(column>值)这样的帅选并没有意义,count不会在这里根据你的条件统计,这样的填入,就相当于给入一个数值一样count(0)或者count(1)效果是一样的,当然count(数字) 这样的写法和count(*)也是同样的效果。所以这里我们只记住count()中填入列名时,是统计忽略null的行数,并且此时可以使用distinct

      实例

mysql> select goods_id,goods_name,max(shop_price) from ecs_goods;
+----------+------------+-----------------+
| goods_id | goods_name | max(shop_price) |
+----------+------------+-----------------+
| 1 | KD876 | 5999.00 |
+----------+------------+-----------------+
1 row in set (0.11 sec) mysql> select min(shop_price) from ecs_goods;
+-----------------+
| min(shop_price) |
+-----------------+
| 18.00 |
+-----------------+
1 row in set (0.00 sec) mysql> select sum(goods_number) from ecs_goods;
+-------------------+
| sum(goods_number) |
+-------------------+
| 313 |
+-------------------+
1 row in set (0.04 sec) mysql> select avg(shop_price) from ecs_goods;
+-----------------+
| avg(shop_price) |
+-----------------+
| 1232.526774 |
+-----------------+
1 row in set (0.00 sec) mysql> select count(cat_id) from ecs_goods;
+---------------+
| count(cat_id) |
+---------------+
| 31 |
+---------------+
1 row in set (0.02 sec)

    Select count(*) from 表名       查询的就是绝对的行数,哪怕某一行所有字段全为空null,也就算在内

    而 select count(列名)from 表名

    查询的是该列不为null的所有行的行数

    用count(*),count(1)谁好呢?

    其实对于myisam 引擎的表,没有区别的

    这种引擎内部有一计算器在维护着行数

    Innodb 的表,count(*)直接读行数的话,效率很低,因为innodb它是一行一行数了一遍

  三、上面是5个统计函数,单独使用,意义不大,要和分组配合起来使用

Group by 分组查询

group by 子句给出一个或多个属性用来构造分组

严格的讲以group by    a,b,c为列则 select的列只能在a,b,c里选择,语义上才没有矛盾,所以在使用group by时,select的内容一定要仔细斟酌确保首先语义上没有错误

    

mysql> select sum(goods_number)
-> from ecs_goods
-> group by cat_id;
+-------------------+
| sum(goods_number) |
+-------------------+
| 0 |
| 203 |
| 3 |
| 8 |
| 61 |
| 23 |
| 4 |
| 9 |
| 2 |
+-------------------+
9 rows in set (0.12 sec) mysql> select goods_id,sum(goods_number)
-> from ecs_goods
-> group by cat_id;
+----------+-------------------+
| goods_id | sum(goods_number) |
+----------+-------------------+
| 16 | 0 |
| 8 | 203 |
| 1 | 3 |
| 23 | 8 |
| 4 | 61 |
| 5 | 23 |
| 25 | 4 |
| 29 | 9 |
| 27 | 2 |
+----------+-------------------+
9 rows in set (0.00 sec) mysql> select cat_id,sum(goods_number)
-> from ecs_goods
-> group by cat_id;
+--------+-------------------+
| cat_id | sum(goods_number) |
+--------+-------------------+
| 2 | 0 |
| 3 | 203 |
| 4 | 3 |
| 5 | 8 |
| 8 | 61 |
| 11 | 23 |
| 13 | 4 |
| 14 | 9 |
| 15 | 2 |
+--------+-------------------+
9 rows in set (0.00 sec)

  就先写这些吧,写长了,大家也没耐心看,哈哈、、、、、太长的博客 ,我也静不下心来写,一点一点总结吧

SQL中的5种聚集函数的更多相关文章

  1. SQL中的5种常用的聚集函数

    首先你要知道 where->group by->having->order by/limit  ,这个就是写sql语句时的顺序  常用的5个聚集函数: Max             ...

  2. sql中的字符串匹配、函数大全

    假设你想建立一个与Yahoo功能相似的Internet目录.你可以建立一个表用来保存一系列的站点名称,统一资源定位器(URL),描述,和类别,并答应访问者通过在HTML form中输入要害字来检索这些 ...

  3. SQL必知必会 -------- 聚集函数、分组排序

    聚集函数 1.AVG()函数 输入:SELECT AVG(prod_price) AS avg_price FROM Products 输出: 警告:只用于单个列AVG()只能用来确定特定数值列的平均 ...

  4. SQL中常用的字符串LEFT函数和RIGHT函数详解!

    今天继续整理日常可能经常遇到的一些处理字符串的函数,记得点赞收藏!以备不时之需!看到最后有惊喜! LEFT(expression, length)函数 解析:从提供的字符串的左侧开始提取给定长度的字符 ...

  5. SQL中只要用到聚合函数就一定要用到group by 吗?

    1.当聚集函数和非聚集函数出现在一起时,需要将非聚集函数进行group by2.当只做聚集函数查询时候,就不需要进行分组了.

  6. SQL中ROW_NUMBER()/RANK() /DENSE_RANK() OVER函数的基本用法

    一.ROW_NUMBER()的用法 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) row_number()从1开始,为每一条分组记 ...

  7. SQL中的四种语言DDL,DML,DCL,TCL

    1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema ...

  8. sql中的几种连接类型

    一.连接类型简介 在sql中单表查询的几率相对来说比较少,随着数据库的日益复杂,多表关联的情况越来越多,在多表关联的情况下存在多种关联的类型, 1.自关联(join或inner join) 2.左外关 ...

  9. sql中的高级编程(函数,存储过程,视图)

    一.函数:用sql写一个函数,调用这个函数,返回一张数据表table CREATE FUNCTION FunName ( ) RETURNS @TempTable table ( roleid int ...

随机推荐

  1. Solaris的vi

    进入输入模式i: 在光标之前插入a: 在光标之后插入o: 在下面新建一行输入I: 光标移动到本行首插入A: 光标移动到本行末尾插入O: 在上面新建一行输入 移动光标M:移到屏幕中间一行的行首L:移到屏 ...

  2. 第一部分 CLR基础:第2章 生成、打包、部署和管理应用程序及类型

    2.1.NET Framework部署目标 Microsoft Windows多年来因不稳定和复杂而口碑不佳.造成的原因:1.应用程序都使用来自微软和厂商的动态链接库(dynamic-link lib ...

  3. IOS学习感想

    1.一开始学习的时候将会感到非常的难,即使自己曾经学过C/JAVA/HTML/CSS/JS/PHP等,但是对于学过C++的人来说,我就不知道了.因为它的语法不同于任何一门语言,所以说入门难是正常的.但 ...

  4. Webservice SOAP传输序列化总结 以及webservice之序列化以及反序列化实例

    一.所有Webservice中传递的对象都必须能够序列化,这个是作为在网络之间传输的必要条件.XML WebService和SOAP标准支持的数据类型如下: 1.基本数据类型. 标准类型,如:int ...

  5. WPF: 读取XPS文件或将word、txt文件转化为XPS文件

    读取XPS格式文件或将doc,txt文件转化为XPS文件,效果图如下: 1.XAML页面代码: <Window x:Class="WpfWord.MainWindow" xm ...

  6. Android照相机应用

    前言 Android在设计架构的时候,采用了mashup(混搭)的设计理念,也就是说一切都是组建,自己写的是组件,别人提供的也是组件,使用的时候只要符合相关协议就可以把他们当作自己的组件.比如系统提供 ...

  7. Apache 多端口多站点配置实例

    分享下Apache多端口多站点的配置方法,配置apache服务器的朋友参考下. 配置httpd.conf 监听多个端口 复制代码代码如下: # Listen: Allows you to bind A ...

  8. php读取excel文件 更新修改excel

    php读取excel文件示例,还有更新修改功能. 代码: //模板存放目录 $dir = $DOCUMENT_ROOT.'/backoffice/admin/oemcheck/'; $template ...

  9. Learning Scrapy笔记(一)- Scrapy简单介绍

    Scrapy简述 Scrapy十一个健壮的,用来从互联网上抓取数据的web框架,Scrapy只需要一个配置文件就能组合各种组件和配置选项,并且Scrapy是基于事件(event-based)的架构,使 ...

  10. IOS开发之后台处理

    1 前言IOS4 之后提供了后台处理,在后台运行应用程序,在一些情形下甚至可以在用户按下Home按钮之后在后台运行. 2 详述IOS可以在用户按下Home按钮后将应用程序添加到暂停状态.这种暂停执行的 ...