MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

【0】README

0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据” 的基础知识;

【1】创建计算字段

1)problem+solution

1.1)problem:存储在表中的数据都不是应用程序所需要的。我们需要直接从数据库中检索出转换,计算或格式化过的数据;

1.2)solution:这就是计算字段发挥作用所在了, 计算字段是运行时在 select语句内创建的;

2)字段定义:基本上与列的意思相同,经常互换使用,不过数据库列一般称为列,而术语字段常用在计算字段的连接上;

Attention)建议在数据库服务器上完成对数据的转换和格式化工作,因为相比于客户机,数据库服务器完成这些操作要快得多;

3)拼接字段

3.1)拼接:将值联结到一起构成单个值(使用 concat() 函数来拼接两个列);

3.2)删除数据右侧多余空格来整理数据: 这可以通过RTrim()函数来实现,(不区分大小写,即rtrim()函数),当然也有ltrim() 函数 和 trim() 函数;

4)执行算术能力

Attention)MySQL中的now() 函数,返回当前日期和时间;


【2】使用数据处理函数

1)上一章中的 rtrim() + ltrim() + trim() 就是一个利用函数的荔枝;

Attention)能运行在多个系统上的代码称为可移植性;相对来说,多数SQL语句是可移植的,但函数的移植性却不强,几乎每种DBMS 的实现都支持其他实现不支持的函数;为了代码的可移植性,许多SQL 程序员不赞成使用特殊实现的功能;如果你决定使用函数,应该保证做好代码注释;(干货——不建议在MySQL中使用函数,因为其函数的可移植性不高);

2)文本处理函数

3)日期和时间处理函数

Attention)首先需要注意的是MySQL 使用的日期格式。无论你什么时候指定一个日期,不管是插入还是更新表值还是用where子句进行过滤,日期必须为格式 yyyy-mm-dd, 这是首选的日期格式,因为它排除了多义性(如 04/05/06 是 2006年5月4日还是2006年4月5日或2004年 5月6日呢?)

problem+solution)

problem)如上图所示,对于datetime 类型的 deal_time ,where deal_time=‘2016-05-10‘ 检索失败;

solution)指示MySQL 仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期和整个列值进行比较。为此,必须使用Date()函数;

Attention)date() 函数 和 time()函数都是在 MySQL4.1.1引入的;

4)还有一种日期需要比较。如,想要检索出 2005年9月下的所有订单,怎么办?(between ... and ... 语句)

5)数值处理函数


【3】汇总数据

1)聚集函数:如确定表中行数;获得表中行组的和;找出表列的最大值,最小值和平均值;

1.1)聚集函数定义:运行在行组上, 计算和返回单个值的函数;

1.2)avg()函数

Attention)NULL值:avg() 函数忽略列值为null 的行;

1.3)count() 函数 的两种用法

func1)使用count(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值;

func2)使用count(column)对特定列中具有值的进行计数,忽略NULL 值;

1.4)max() 函数 和 min() 函数 + sum()函数

2)聚集不同值:以上5个聚集函数都可以如下使用:

2.1)对所有的行执行计算,指定all 参数或不给参数(因为all 是默认行为);

2.2)只包含不同的值,指定distinct 参数;

看个荔枝)考虑各个不同的price(distinct==不同的)

3)组合聚集函数


【4】分组数据(group by  和 having 子句)

1)数据分组:统计每个供应商提供的产生数量;

2)创建分组:分组是在select 语句中通过 group by 子句创建的;

3)在具体使用 group by 子句前,需要知道一些重要的规定(rules)

r1)group by 子句可以包含任意数目的列,这使得对分组可以嵌套,为数据分组提供更细致的控制(也即 group by column1, column2==先按照column1进行分组,再按照column2进行分组);

r2)如果在group by 子句中嵌套了分组,数据将在最后规定的分组上进行汇总。换句话说,在建立分组时,指定的所有列都一起计算;

r3)group by子句中列出的每个列都必须是检索列或有效的表达式。如果在select中使用表达式,则必须在group by子句中指定相同的表达式,不能使用别名;

r4)初开聚集计算语句外,select语句中的每个列都必须在 group by 子句中给出;(干货规定)

r5)如果分组列中具有null 值, 则null 值将作为一个分组返回。 如果列中有多行NULL 值,它们将分为一组;

r6)group by 子句必须出现在 where 子句之后,order by 子句之前;(干货——group by 子句在 where子句和order by 子句的位置)

Attention)使用rollup:使用with rollup 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值;

4)过滤分组

4.1)过滤分组使用 having子句进行处理;

4.2)where子句和having子句的区别(Difference):

D1)where过滤行,而having 过滤列;

D2)where 在数据分组前进行过滤,而having在数据分组后进行过滤;(干货——这是where 和having一个重要的区别)

Attention)having子句的位置:having子句过滤是基于group by的,它在group by子句的后面 ;

看个荔枝)证明where 在数据分组前进行过滤,而having在数据分组后进行过滤;(干货——这是where
和having一个重要的区别)

5)分组和排序(group by 和 order by)

5.1)group by 和 order by的不同

5.2)不要忘记group by:一般在使用 group by 子句时,应该也给出order by子句。这是保证数据正确排序的唯一方法;

6)select
子句的顺序

时间: 2024-12-20 00:46:12

MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据的相关文章

字符串函数、数据类型转换函数、连接查询

1.字符串函数 --将身高的平均值转化为asc码 select ASCII(AVG(shengao))from sg --将体重的最大值转化为字符型 select CHAR (MAX(tizhong))from sg --返回一个字符串的四位soundex码 select SOUNDEX ('lskd') --比较两个soundex码有几位相同 select DIFFERENCE ('dgghsf','dfs') --打印空格 select SPACE (11) select 'a'+SPACE

字符串函数和数据类型转换函数

--字符串函数.返回字符串最左侧的字母的asii码print ascii('abcde')print ascii(' ')print char(97)--ascii码和字符之间的转换--*charindex查找字符串中对应字符段的开始索引,索引从1开始print charindex('de','abcdefg')--concat字符串链接print'abc'+'de'--select SOUNDEX('hello')select SOUNDEX('hell')select soundex('he

mysql创建字段非空NOT NULL的好处

详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt338 很多表都包含可为 NULL (空值) 的列,即使应用程序井不需要保存 NULL 也是如此 ,这是因为可为 NULL 是列的默认属性.通常情况下最好指定列为 NOT NULL,除非真 的需要存储 NULL 值. 如果查询中包含可为 NULL 的列,对 MySQL 来说更难优化 ,因为可为 NULL 的列使 得索引.索引统计和值比较都更复杂 .可为NULL 的列会使用更多

MYSQL 【汇总数据】 【分组数据】 学习记录

分组数据 1,创建分组:

mysql之数据处理函数与数据汇总函数

一.数据处理函数   1.函数 与其他大多数计算机语言一样, SQL支持利用函数来处理数据.函数一般是在数据上执行的,它给数据的转换和处理提供了方便. 注意:函数没有 SQL的可移植性强.能运行在多个系统上的代码称为可移植的( portable).相对来说,多数SQL语句是可移植的,在SQL实现之间有差异时,这些差异通常不那么难处理.而函数的可移植性却不强.几乎每种主要的 DBMS的实现都支持其他实现不支持的函数,而且有时差异还很大.为了代码的可移植,许多 SQL程序员不赞成使用特殊实现的功能.

MYSQL结果排序、分页查询、聚合函数

结果排序 使用ORDER BY子句将查询记录进行排序, ASC : 升序,缺省. DESC : 降序. ORDER BY 子句出现在SELECT语句的最后. 格式: SELECT <selectList> FROM table_name WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...; ------------------------------------------------------- 按单列排序: 需求:选择id,货品名称,分类

mysql timestamp字段定义的

Cause: java.sql.SQLException: Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TIMESTAMP.; SQL []; Cannot convert value '2017-07-26 20:40:41.000000' from column 10 to TIMESTAMP.; nested exception is java.sql.SQLException: Cannot co

MYSQL必知必会读书笔记 第十和十一章 使用函数处理数据

拼接字段 存储在数据库表中的数据一般不是应用程序所需要的格式.我们需要直接从数据库中检索出转换.计算或格式化过的数据:而不是检索出数据,然后再在客户机应用程序或报告程序中重新格式化. 计算字段(字段 = 列,不过数据库列一般称为列,而字段通常用于计算字段中)并不实际存在于数据库表中,计算字段是运行时在select语句内创建的. 拼接 concatenate 将值联结到一起构成单个值 在MySQL的select语句中,可使用Concat()函数来拼接两个列. 如创建由两列组成的标题:生成一个供应商

MySQL汇总数据

汇总数据 有时对数据表的操作不是表中数据本身,而是表中数据的汇总,例如 某一列数据的平均值,最大值,最小值等.而对于这些常用的数据汇总处理,MySQL提供了函数来处理. SQL聚集函数 函数 说明 COUNT() 返回某列的行数 MAX() 返回某列最大值 MIN() 返回某列最小值 AVG() 返回某列平均值 SUM() 返回某列值之和 例子: 首先显示出products表格如下: 求出prod_price列的平均值 看起来比较怪,原表只显示了一行: 求出特定行的 如vend_id =1003