- 浏览: 7330980 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在项目中查询常驻酒店的中住的次数最多的前10个酒店:
代码如下:
/**
* 常住酒店查询
*/
private function usualHotel():void
{
var sql:String = "SELECT O.*,ROWNUM FROM ( SELECT COUNT(T.HOTEL_ID) HOTELNUM ,T.HOTEL_ID ,T.HOTEL_NAME FROM" +
" T_BUSS_HOTEL_ORDER T WHERE T.MEMB_CARD_NO=? GROUP BY T.HOTEL_ID ,T.HOTEL_NAME " +
"ORDER BY HOTELNUM DESC) O WHERE ROWNUM<10";
RemoteDataService.query(sql,[hotelSturct.MEMB_CARD_NO],usualQueryResult);
/**
* 查询常住酒店的回调函数
*
*/
function usualQueryResult(result:ArrayCollection):void
{
trace("result="+result);
if(result!=null&&result.length > 0)
{
for(var i:int = 0;result.length > i;i++)
{
var tmp:Object=result[i];
var linkbtn:LinkButton=new LinkButton();
linkbtn.label=tmp.HOTEL_NAME;
//此处采用匿名函数的方法查询酒店的信息
linkbtn.addEventListener(MouseEvent.CLICK,function(e:MouseEvent){clickHandler(e,tmp.HOTEL_ID)});
USUAL_HOTEL.addChild(linkbtn);
}
}
}
/**
* 点击事件的回调函数
*/
function clickHandler(e:MouseEvent,hotelId:Number):void
{
queryHotel(QUERYBYHOTELID,[hotelId],USUALHOTELINFOGRIDITEM);
}
}
查询中使用基础知识:
(1)order by
ORDER BY子句的语法为:
SELECT column1, SUM(column2) FROM "list-of-tables"
ORDER BY "column-list" [ASC | DESC];
[ ] = optional
ORDER BY是一个可选的子句,它允许你根据指定要order by的列来以上升或者下降的顺序来显示查询的结果。例如:
ASC = Ascending Order – 这个是缺省的
DESC = Descending Order
下面举个例子:
SELECT employee_id, dept, name, age, salary
FROM employee_info
WHERE dept = 'Sales'
ORDER BY salary;
这条SQL语句将从employee_info表中列dept等于'Sales'选择employee_id,、dept、 name、 age和 salary,并且根据他们的salary按升序的顺序来列出检索结果。
如果你想对多列排序的话,那么在列与列之间要加上逗号,比如 :
SELECT employee_id, dept, name, age, salary
FROM employee_info
WHERE dept = 'Sales'
ORDER BY salary, age DESC;
(2)group by
一、首先讲讲GROUP BY 子句语法:
SELECT column1, SUM(column2) FROM "list-of-tables"
GROUP BY "column-list";
这个GROUP BY子句将集中所有的行在一起,它包含了指定列的数据以及允许合计函数来计算一个或者多个列。当然最好解释的方法是给出一个例子啦:
假设我们将从employee表中搜索工资最高的列,可以使用以下的SQL语句:
SELECT max(salary), dept
FROM employee
GROUP BY dept;
这条语句将在每一个单独的部门中选择工资最高的工资。结果他们的salary和dept将被返回。
二、group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。
什么是“聚合函数”?
像sum()、count()、avg()等都是“聚合函数”
使用group by 的目的就是要将数据分类汇总。
一般如:
select 单位名称,count(职工id),sum(职工工资) form [某表]
group by 单位名称
这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数和工资总额。
在sql命令格式使用的先后顺序上,group by 先于 order by。
select 命令的标准格式如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
三、理解group by:
表1:
type
udate
mp3
2006-3-2
flash
2006-1-2
mp3
2006-2-2
在表1中,假设要取出最后更新的某一类型(type)产品的日期
那么就要使用group by type的方式
select type from 表1 group by type
但这样就无法读到udate
再来
select type,udate from 表1 group by type
这种写法是错误的。
原因是type和udate 不是一对一的关系。就是说一种type有几个udate
所以
selct ** group by ** 之后没办法组织形成新的表,不知道要取哪个udate
再来
select type,max(udate) from 表1 group by type
这样就正确了。
取的是最大的udate ,一对一成立。
四、GROUP BY... 被附加于SQL 是因为聚会函数 (如 SUM) 每次都返回所有列值的合计,没有GROUP BY函数是不可能找到列值的单个分组的合计数。
语法
SELECT column,SUM(column) FROM table GROUP BY column
-----------------------------------------------
GROUP BY 示例
这个 "Sales" 表:
Company Amount
W3Schools 5500
IBM 4500
W3Schools 7100
和这个SQL语句:
SELECT Company, SUM(Amount) FROM Sales
返回这个结果:
Company SUM(Amount)
W3Schools 17100
IBM 17100
W3Schools 17100
上面的代码是不正确的,因为被返回的列不是部分合计。GROUP BY 子句将解决这个问题。
SELECT Company,SUM(Amount) FROM Sales GROUP BY Company
返回结果:
Company SUM(Amount)
W3Schools 12600
IBM 4500
五、
SQL Group by 学习 及相关应注意的地方
在select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。group by 子句可以将查询结果分组,并返回行的汇总信息Oracle 按照group by 子句中指定的表达式的值分组查询结果。
在带有group by 子句的查询语句中,在select 列表中指定的列要么是group by 子句中指定的列,要么包含聚组函数
select max(sal),job emp group by job;
(注意max(sal),job的job并非一定要出现,但有意义)
查询语句的select 和group by ,having 子句是聚组函数唯一出现的地方,在where 子句中不能使用聚组函数。
select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;
当在gropu by 子句中使用having 子句时,查询结果中只返回满足having条件的组。在一个sql语句中可以有where子句和having子句。having 与where 子句类似,均用于设置限定条件
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
查询每个部门的每种职位的雇员数
select deptno,job,count(*) from emp group by deptno,job;
注意:
group by 不能对别名进行分组排序.举例如下:
错误SQL:
SELECT to_char(BASICROLL.ROLLDATE,'yyyy-mm') AS YEARDATE,
DEPTDICT.CNNAME DEPTNAME,
COUNT(BASICROLL.ID) AS PROJCOUNT
FROM BASICROLL LEFT JOIN DEPTDICT ON BASICROLL.ARRDEPTDICTID=DEPTDICT.ID
WHERE DEPTDICT.CNNAME <> '无'
GROUP BY YEARDATE, DEPTDICT.CNNAME 1
ORDER BY YEARDATE DESC 2
作者原意是将记录按年月,部门进行分组.并倒序排序.但上面的GROUP BY因为用了别名,所以会提示SQL语法错误.如果将上面1,2二句改成:
GROUP BY BASICROLL.ROLLDATE, DEPTDICT.CNNAME 3
ORDER BY BASICROLL.ROLLDATE DESC 4
如上3,4二句,又会不合原意,因为BASICROLL.ROLLDATE 包括了年月日.这样分组得出的是按年月日来分组,而不是单纯的年月了.所以正确的SQL应该是这样的.
正确的SQL
SELECT to_char(BASICROLL.ROLLDATE,'yyyy-mm') AS YEARDATE,
DEPTDICT.CNNAME DEPTNAME,
COUNT(BASICROLL.ID) AS PROJCOUNT
FROM BASICROLL LEFT JOIN DEPTDICT ON BASICROLL.ARRDEPTDICTID=DEPTDICT.ID
WHERE DEPTDICT.CNNAME <> '无'
GROUP BY to_char(BASICROLL.ROLLDATE,'yyyy-mm'), DEPTDICT.CNNAME
ORDER BY to_char(BASICROLL.ROLLDATE,'yyyy-mm') DESC
以上的注意部分为本人在项目开发过程中经验所得.
六、例子
1> select * from bank_info
2> go
bankno acctround
------ ---------
123456 1
123456 2
(2 rows affected)
1> select * from bank_info where acctround='1' group by bankno order by bankno
2> go
bankno acctround
------ ---------
123456 1
123456 2
(2 rows affected)
1> select * from bank_info where acctround='1' order by bankno
2> go
bankno acctround
------ ---------
123456 1
(1 row affected)
1> select * from bank_info
2> go
bankno acctround
------ ---------
123456 1
123456 2
(2 rows affected)
1> select * from bank_info where acctround='1' group by bankno,acctround order by bankno
(1 row affected)
group by bankno,acctround的意思是找出bankno,acctround两列完全相同的不同行作为一组.那上面的数据就分成两组了,因为acctround不同,而结果需要acctround='1'的组.所以只有一行结果.如果是group by bankno,那么两行会合成一行.它并没有先通过where分析出只有一行符合结果集,再group就只有一行结果了.这里的问题是where和 group谁先谁后分析的问题?在这个问题的上下文中,本来的group by bankno就没有任何意义.其实是这样的:
或者是:
select bankno,sum(money) from bankdiff group by bankno;
又或者是:
select bankno,acctround,sum(money) from bankdiff where acctround='1' group by bankno,acctround;
不可能指定acctround又不把它放在groub by中的.
1> select * from bank_info group by bankno
2> go
bankno acctround
------ ---------
123456 1
123456 2
可见这个group by没有意义.因为它有select *,而acctround不一样,就不能只显示一行出来.把select * 改成 select bankno就只有一行结果了.
总结:使用group by必需明确你分组的意义,是否有必要这一个列或几个列来确定一个有意义的组,而需要显示的结果行的列是否和group by子句中的列名相冲突.一般不在group by子句中的列名都不会直接在select中显示出来.因为它们要分成一组来或者做些运算再显示.如sum(money)等.
(3)having
一、下面先给出HAVING子句的语法:
SELECT column1, SUM(column2) FROM "list-of-tables"
GROUP BY "column-list"
HAVING "condition";
这个HAVING子句允许你为每一个组指定条件,换句话说,可以根据你指定的条件来选择行。如果你想使用HAVING子句的话,它应该处再GROUP BY子句之后。
下面将以一个例子来解释HAVING子句。假设我们的employee表中包含雇员的name、departmen、salary和age。如果你想为每个部门中每个雇员选择平均工资的话,你可以使用下面的SQL语句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept;
当然,如果你还想只计算和显示salary大于20000的平均工资的话,你还可以加上HAVING子句:
SELECT dept, avg(salary)
FROM employee
GROUP BY dept
HAVING avg(salary) > 20000;
二、HAVING... 被附加到SQL语句是因为WHER关键字不能被用于聚会函数 (如 SUM),并且没有HAVING...它将不可能测试结果条件。
语法:
SELECT column,SUM(column) FROM table GROUP BY column HAVING SUM(column) condition value
这个 "Sales" 表:
Company Amount
W3Schools 5500
IBM 4500
W3Schools 7100
和这个SQL语句:
SELECT Company,SUM(Amount) FROM Sales GROUP BY Company HAVING SUM(Amount)>10000
返回这个结果
Company SUM(Amount)
W3Schools 12600
发表评论
-
flex 中As3Commons的使用學習
2009-10-15 12:53 3723學習Java的人,知道java中反射的强大, ... -
flex的国家化的应用
2009-09-23 08:59 2091在项目中需要使用发送短信模板的功能的,根据主题不同,模板不同, ... -
flex的沙箱问题
2009-09-14 17:14 5449在flex与google的地图整合中发现,点击了goog ... -
Flex 常用技巧
2009-09-04 13:00 2573flex是一种异步请求的技术,如果要实现同步必须在传递函 ... -
Flex 開發Google地圖
2009-08-24 13:16 24411 .获取googe的key 2.下载google的fle ... -
objectProxy的监控对象应用
2009-08-08 13:46 2676在项目中查询根据一个字段发生实现需要特殊的功能,作出相应的动作 ... -
Flex 依赖注入
2009-08-08 13:41 2091了解依赖注入 众所周 ... -
Flex 与外部的数据通信(HTTPService,URLLoader和URLRequest)
2009-08-08 13:36 7429ActionScript 3.0中提供的数据加载请求类主要是H ... -
flex 数据绑定
2009-08-08 13:31 24019.2.1 函数和类级别的绑定 [Bindable]标签打使 ... -
Flex中Entity对象与Display对象之间的数据双向动态绑定
2009-08-08 13:27 2447flex项目中对象的和组 ... -
学习ActionScript 3.0的新特点
2009-08-06 13:05 2005ActionScript3.0 是一种类型 ... -
理解 Flex itemRenderer - 第 1 部分: 内联渲染器
2009-08-05 16:37 3134Flex 提供许多控制, 它们可以按不同方式显示大量数据。Li ... -
flex 中类似Google的提示下拉菜单实现
2009-08-01 16:28 5413项目中使用类似Gooogle输入提示菜单的实现如下 ... -
针对Flex中组件的扩展的应用开发
2009-08-01 16:04 2864在项目中使用一个自定义的CheckboxGroup组件继承自C ... -
Flex类似Google搜索提示的两种做法思路
2009-08-01 15:52 2676做了个简单的搜索提示 ... -
Flex中直接获取某个组件的对象
2009-08-01 15:47 2451Flex中直接获取某个组件的对象方案1: 遍历这些butto ... -
flex 查看类的各种数据的权限
2009-08-01 15:18 1867查看类的一些属性的信息:可读,可写,可读可写。 ... -
flex中getDefinitionByName 函数的使用
2009-08-01 12:40 6738在项目中自定义一个CheckboxGroup,这个控件里面 ... -
Flex 学习中数据类型必须注意的几点
2009-08-01 12:36 2245在字符串转换为int类型必须使用 最好如下: var a:i ... -
flex BindUtils的扩展的样式表绑定工具类StyleBindingUtils
2009-07-30 13:06 2215项目中使用的样式表绑定类如下: package uti ...
相关推荐
在SQL查询中,`ORDER BY`、`GROUP BY` 和 `HAVING` 是三个非常重要的子句,它们分别用于不同的数据处理操作。 1. **ORDER BY** 子句: - `ORDER BY` 用于对查询结果进行排序,按照指定的字段进行升序或降序排列。...
在SQL查询中,`order_by_`、`group_by_`和`having`是三个非常重要的关键字,它们分别用于不同的数据处理操作。 1. `ORDER BY`:此关键字用于对查询结果进行排序,默认是升序(ASC),也可以指定降序(DESC)。在`...
order_by_、group_by_、having的用法区别
本文将详细介绍WHERE、GROUP BY、HAVING、ORDER BY的执行顺序和编写顺序,以及它们之间的关系。 一、WHERE子句的执行顺序 WHERE子句的执行顺序是先对全表数据进行筛选,返回第一个结果集。WHERE子句的作用是过滤...
在MySQL数据库中,ORDER BY、GROUP BY 和 HAVING 子句是SQL查询中用于数据...在实际应用中,ORDER BY、GROUP BY 和 HAVING 的组合使用可以实现更复杂的查询需求,比如多级分组和排序,以及基于分组结果的进一步筛选。
在SQL查询语言中,`ORDER BY`, `GROUP BY`, 和 `HAVING` 是三个非常重要的概念,它们分别用于对查询结果进行排序、分组以及在分组后进一步筛选数据。这些操作对于数据分析和报表制作来说至关重要。 #### 二、ORDER ...
当同时出现了where_group_by_having_order_by的时候_执行顺序和编写顺序时的用法
本文就和大家一起深入研究下mysql中group by与order by.下面是我模拟我的内容表 我现在需要取出每个分类中最新的内容 select * from test group by category_id order by `date` 结果如下 明显。这不是我想...
在SQL中,分组查询是通过`GROUP BY`子句来实现的,它可以将数据按照一个或多个列的值进行分组,通常结合聚合函数一起使用,以便对每个分组执行计算。 1. SQL中的分组查询 在SQL中,使用`GROUP BY`语句进行分组操作...
3. **排序顺序**:当同时使用`GROUP BY`、`HAVING`和`ORDER BY`时,`ORDER BY`通常放在最后。在示例中,`ORDER BY p.name`确保结果按供应商名字排序,而Oracle会默认按照`GROUP BY`中的列顺序进行排序,即先按年份、...
`GROUP BY`和`HAVING`结合使用,可以实现更复杂的分组统计和过滤,尤其在需要对分组结果进行进一步分析时非常有用。例如,我们可以根据`work_date`统计每个月的平均打字页数,或者找出每月打字最多的员工。这在数据...
在SQL查询中,`ORDER BY` 和 `GROUP BY` 是两个重要的子句,它们的作用不同,但都用于处理数据的组织和展示。了解这两者的区别对于编写高效的SQL语句至关重要。 1. `ORDER BY` 子句: `ORDER BY` 用于对查询结果...
MySQL中的`ORDER BY`和`GROUP BY`是SQL查询中两个关键的子句,它们用于对查询结果进行排序和分组。然而,在某些情况下,MySQL可能会使用`Using filesort`来完成这些操作,这通常会导致性能下降。本文将深入探讨`...
在SQL查询中,`GROUP BY`,`HAVING`,和`ORDER BY`是三个非常重要的子句,它们分别用于数据的分组、过滤和排序。下面是对这三个概念的详细解释。 1. `GROUP BY` 子句: `GROUP BY` 用于将数据根据指定的一个或多个...
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是... 您可能感兴趣的文章:sql中 order by 和 group by的区别深度分析mysql GROUP BY 与 ORDER BYgroup by,having,o