题目描述如下:有表
表1:t_a
Name:姓名
Number:分数
Class:班级序号 Name Number class
1 X1 80 1
2 X2 85 1
3 X3 80 2
4 X4 80 1
5 X5 90 1
6 X6 90 1想:通过一个SQL查询出所有class为1的记录,并查出:每个Number相同的所有记录数量,数据库是ORACLE.
期望结果如下:
序号 Name Number class 相同分数
的人数
1 X1 80 1 3
2 X2 85 1 1
3 X3 80 2 3
4 X4 80 1 3
5 X5 90 1 2
6 X6 90 1 2
表1:t_a
Name:姓名
Number:分数
Class:班级序号 Name Number class
1 X1 80 1
2 X2 85 1
3 X3 80 2
4 X4 80 1
5 X5 90 1
6 X6 90 1想:通过一个SQL查询出所有class为1的记录,并查出:每个Number相同的所有记录数量,数据库是ORACLE.
期望结果如下:
序号 Name Number class 相同分数
的人数
1 X1 80 1 3
2 X2 85 1 1
3 X3 80 2 3
4 X4 80 1 3
5 X5 90 1 2
6 X6 90 1 2
解决方案 »
- 初学Oracle关于新建数据库,服务,进程的问题!
- HQL count(*)和 fetch 的问题
- 为什么我的oracle 10g装完没有pro*C工具??
- distinct与group by在查询的时候若查询条件不包含聚集函数的情况下效率咨询
- date 类型怎么使用?我的这条语句为什么有这个错误 ?
- sql group by 急
- 请问如何统计一批数据表的最后新增或修改数据日期?
- 新手提问:“to_char(key_date,'yyyymmdd') as dt_yyyymmdd”后面的as dt_yyyymmdd是什么意思呢?
- 是否可以通过手工方式直接从oracle中把数据迁移到mysql中?
- Oracle傻瓜化高性能C++访问组件(求精华)
- SQL取時間問題
- 求SQL优化
2 union
3 select 'x2' name,85 number1,1 class from dual
4 union
5 select 'x3' name,80 number1,2 class from dual
6 union
7 select 'x4' name,80 number1,1 class from dual
8 union
9 select 'x5' name,90 number1,1 class from dual
10 union
11 select 'x6' name,90 number1,1 class from dual
12 )
13 select name,number1,class,count(number1)over(partition by number1) number2
14 from a
15 order by 1
16 /
NAME NUMBER1 CLASS NUMBER2
---- ---------- ---------- ----------
x1 80 1 3
x2 85 1 1
x3 80 2 3
x4 80 1 3
x5 90 1 2
x6 90 1 2
6 rows selected
SQL>
只要是根据number来分组就可以
select name,number1,class,count(number1)over(partition by number1) number2
from a
order by 1
(
select 1 a, 80 b, 1 c from dual
union all
select 2, 85, 1 from dual
union all
select 3, 80, 2 from dual
union all
select 4, 80, 1 from dual
union all
select 5, 90, 1 from dual
union all
select 6, 90, 1 from dual
)
select a,b,c, count(b) over(partition by b) rn from temp