Oracle数据库查询,分组查询显示数据,请教

已知数据表:
SQL> create table student(
2 id number primary key, --id主键
3 name varchar2(20), --姓名
4 classnumber number, --班级号
5 age number --学生年龄
6 );
表中有数据;
如何实现查询结果:根据班级号分组查询出来学生信息,并且每组中查询出来的学生信息按照学生的年龄降序排列

例如:查询结果是:
班级号 年龄 ……
001 26
001 25
001 22
002 29
002 21
请教在Oracle中实现此结果的SQL语句写法
还有按照班级分组显示,分别是班级和所对应班级学生的年龄降序排列,这个结果是按组显示的了,SQL该怎么写呢,请教

select * from student order by classnumber asc,age desc

按班级号正序就是asc,这个asc可以省略(排序时默认就是正序)

再按age排倒序就用desc

 

order by后的按前后顺序也是分主次的

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-18
你的结果没有分组,只是按班级号来排序而已。很简单的:
select classnumber, age, name, id
from studen
order by age追问

以上SQL我知道。还有按照班级分组显示,分别是班级和所对应班级学生的年龄降序排列,这个结果是按组显示的了,SQL该怎么写呢,请教

追答

还是没太明白你的分组,分组是使用group by,但是你要求的结果是不需要分组的啊,只要排序就可以了。不过是排序的顺序而已。
select classnumber, age, name, id
from studen
order by classnumber, age desc

追问

嗯嗯,谢谢。能否写一个分组查询的较复杂写的SQL例子,谢谢

追答

最简单的就如下了,不能分组但也要显示的字段,需要使用汇总的函数,比如sum,count,max等。
select classnumber
from studen
group by classnumber

第2个回答  2014-02-18
select classnumber 班级号,age 年龄 from student order by classnumber;

oracle sql语句相关问题,分组后查询。
首先,你提的问题有些疑惑,你要d字段统级次数最多的前5个数据,照你这句话,查询出来的结果集应该是大于等于5行数据的.比如 select * from (selct d,count(1) as top5 form t group by d order by top5 desc) a where rownum<=5。查出的结果集可能为:d top5 x 10 y 9 z...

Oracle按部门分组,查询max(avg(sal))结果显示两列,部门编号max(avg(s...
兄弟,你的sql语句有问题,如果你想要显示两列,一个是部门编号,一个是最大的部门平均工资,这样的话,数据只可能有一行两列,你可以这样写:select e.deptno,round(avg(e.sal),2)from emp e group by e.deptno having round(avg(e.sal),2) = (select max(round(avg(e.sal),2))from emp...

oracle,sql分组问题,求助
你这样根本就无法分组,除非F1每组的“AA”、“BB”值不一样,比如下面这样的数据,则可以按你的要求进行分组。我的实际DB不一样,对比如下:T=a_lmo_temp F1=id1 F2=id2 查询SQL如下:SELECT A1.ID1 AS F1,A1.ID2 AS F2,A2.NUMS AS F3 FROM A_LMO_TEMP A1 INNER JOIN (SELECT ID1...

Oracle之查询详解
子查询是指嵌套在其他sql语句中的select语句,也叫嵌套查询。sql语句执行顺序为从右到左执行,所以在执行查询时会先执行左侧的子查询后进行主查询。 子查询分为单行子查询和多行子查询,单行子查询是指返回一行数据的子查询语句,多行子查询是指返回多行数据的查询语句。子查询还可以分为多列子查询、多行子查询、多...

oracle分组统计查询之后,获取数量最大的记录
select * from (select a.*,row_number() over (partition by a.col_a order by create_ts desc) as rn from table1 a )where rn = 1;-- table1 换成你的表, col_a 换成你的分组列, create_ts 是你的时间戳字段, 如果是字符串需转换为date ...

Oracle分组后显示每组的前几条记录
逻辑很简单,但是看下解析之后还是很明白的。Q2。在oracle中有一数据表exam_result(成绩记录表),表中的一条记录描述了“某个班某个学生某次考试的成绩"create table EXAM_RESULT(ID NUMBER(10) not null, --主键 CLASSID NUMBER(10) not null, -- 班级id,关联到班级表 USERID NUMBER(10) ...

五种主流数据库:分组统计
首先,GROUP BY子句是关键,它能根据性别、部门等字段将数据分组。例如,我们可以看到,通过查询员工表,按照性别分组,可以得到如下的性别统计结果:GROUP BY 语句将员工性别分为男、女两组,结果如下:...(结果展示)...接着,结合聚合函数(如COUNT和AVG),我们可以在每个组内进行汇总,如计算男性...

谁能帮忙教教mysql数据库的分组查询呀,最好举例几张表,给出查询结果...
oracle 有重复值,分组取和 100 业务表很大, 不能单独举例,大体意思如下图:1.以NO字段为主,进行分组。2.同一个NO,会对应不同的姓名。3.如果收费项目包含‘10’的话,NO字段在表中唯一,不重复。4.目标语句:当收费醒目包含‘10’这一项,则统计no='1' 且 姓名=‘张三’,所有收费项目对...

oracle数据库查询?
以下是在 SQL 数据库(以 MySQL 为例)中实现查询近三年同月日发生事件最大数和最小数的方法。假设你的表格名为event_table,包含字段event_time(事件发生时间)。图中 SQL 语句首先确定了当前日期和近三年的开始日期,然后在子查询中按照事件发生时间的月日进行分组统计事件数量,最后在外部查询中求出...

oracle sql查询完成分组并只返回每组的最小最大值
我的测试表里有7条数据。每3条数据分作一组求最小和最大id。WITH tmp ("id") AS (SELECT 1 FROM DUAL UNION ALLSELECT 2 FROM DUAL UNION ALLSELECT 3 FROM DUAL UNION ALLSELECT 4 FROM DUAL UNION ALLSELECT 5 FROM DUAL UNION ALLSELECT 6 FROM DUAL UNION ALLSELECT 7 FROM DUAL ) ...

相似回答