9.2.1 Renaming Retrieved Columns

来源:互联网 发布:vmware 网络虚拟化 编辑:程序博客网 时间:2024/06/06 12:54

为了命名一个列名。select 1 as one ,4*2 'for Times Three';

1.这关键字AS是可选的

2.一个别名可能是引用

3.不能再where语句中使用别名

9.3指定哪一行被获得

< > or

9.3.1 使用order by to 排序query结果

默认是按升序排列

9.3.2 数据类型的自然排序

1.一个数值类型排序是升序按大小

2.一个时间默认按升序

3.字符串类型

4.对于集合类型可以使用表示的值排序也可以 order by cast(hue as char)

9.3.3 使用LIMIT来限制选择

LIMIT row_count

LIMT skip_count,row_count

select* form country limit 10.选择前10行

select * from contry limit 20,10;跳过20行和返回接下来的10行

select distinct last_name from t;

下面的语句时等效的:

select distinct id from t;

select id from t group by id;

下面的语句也是等效的:

select distinct id,name from t;

select id,name from t group by id,name;

统计数目:

select count(distinct j) from t;

9,4 Aggetgating results

select continent avg(population) from Country group by continent;

聚合函数可以在使用group by和没有使用group by的情况下使用,没有使用group by把整个表当做整体

9.4.1 这MIN()and MAx()聚合函数

slect MIN(Population),MAX(Population) from Country;

select count(i) ,coun(j) from t;

select count(distinct i),cont(distinct j) from t;

group_concat(Language)把结果连接在一起

如:select group_concat(Language SEPATOR  '-')

       as Languages

      From CountryLanguage where CountryCode='THA';

9.4.5 聚合函数对于NULL值和空集合

1.count(*) 并不忽略NULL值

 2.count(expression) 和count(distinct)忽略掉NULL值。

9.5 对结果分组

找到每个title发送的次数select title,count(*) from personnel group by title;

9.5.1 Group BY and sorting

在MYSQL中,一个group by语句对sorting rows有副面的影响。如果已经使用了group by语句在你的查询中产生了需要的排序,没有必要使用ordery by。使用order by 仅仅是产生一个与仅仅使用group by不同的排序。

9.5.2 选择Group使用having

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:

SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2



having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:

SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2

使用 GROUP BY 的 WITH ROLLUP 字句可以检索出更多的分组聚合信息,它不仅仅能像一般的 GROUP BY 语句那样检索出各组的聚合信息,还能检索出本组类的整体聚合信息。
下面我们的例子对比了普通的 GROUP BY 操作和有 WITH ROLLUP 子句的 GROUP BY 操作的不同:
查询表的内容,是雇员的基础信息表:


[xhtml] view plain copy
<a href="http://lib.csdn.net/base/14" class='replace_word' title="undefined" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>> select * from employee;  
+------+--------+------+------+------+  
| id | name | dep | pos | sal |  
+------+--------+------+------+------+  
| 1 | abcd | 01 | 01 | 1000 |  
| 2 | eefs | 01 | 02 | 2000 |  
| 3 | micro | 02 | 01 | 1500 |  
| 4 | cathey | 02 | 02 | 3000 |  
| 5 | amy | 03 | 01 | 2500 |  
| 6 | lily | 03 | 02 | 2200 |  
| 7 | bobo | 01 | 01 | 2000 |  
| 8 | gray | 01 | 02 | 1900 |  
| 9 | leon | 03 | 02 | 2900 |  
| 10 | sun | 02 | 02 | 1900 |  
+------+--------+------+------+------+  
10 rows in set (0.00 sec)  
 
普通的 GROUP BY 操作,可以按照部门和职位进行分组,计算每个部门,每个职位的工资平均值:


[xhtml] view plain copy
mysql> select dep,pos,avg(sal) from employee group by dep,pos;  
+------+------+-----------+  
| dep | pos | avg(sal) |  
+------+------+-----------+  
| 01 | 01 | 1500.0000 |  
| 01 | 02 | 1950.0000 |  
| 02 | 01 | 1500.0000 |  
| 02 | 02 | 2450.0000 |  
| 03 | 01 | 2500.0000 |  
| 03 | 02 | 2550.0000 |  
+------+------+-----------+  
6 rows in set (0.02 sec)  
 


如果我们希望再显示部门的平均值和全部雇员的平均值,普通的 GROUP BY 语句是不能实现的,需要另外执行一个查询操作,或者通过程序来计算。如果使用有 WITH ROLLUP 子句的 GROUP BY 语句,则可以轻松实现这个要求:


[java] view plain copy
mysql> select dep,pos,avg(sal) from employee group by dep,pos with rollup;  
+------+------+-----------+  
| dep | pos | avg(sal) |  
+------+------+-----------+  
| 01 | 01 | 1500.0000 |  
| 01 | 02 | 1950.0000 |  
| 01 | NULL | 1725.0000 |  
| 02 | 01 | 1500.0000 |  
| 02 | 02 | 2450.0000 |  
| 02 | NULL | 2133.3333 |  
| 03 | 01 | 2500.0000 |  
| 03 | 02 | 2550.0000 |  
| 03 | NULL | 2533.3333 |  
| NULL | NULL | 2090.0000 |  
+------+------+-----------+  
10 rows in set (0.00 sec)  
 


需要注意的是,使用有 WITH ROLLUP 子句的 GROUP BY 语句时,不能再使用 ORDER BY 语句对结果集进行排序,如果对返回的结果顺序不满意,需要应用程序获得结果后在程序中进行排序。


(select subscriber,email from list1)UNION (select name,address from list2 )UNION(select real_name,email from list3)

0 0
原创粉丝点击