题目描述如下:有表
表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.   

    SQL> with a as (select 'x1' name,80 number1,1 class from dual
      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> 
      

  2.   

    这个没有关系的,用这条语句是可以搞定的
    只要是根据number来分组就可以
      

  3.   

    你运行的时候只要这个就可以了,前面的一大堆我是为了构搞数据的
    select name,number1,class,count(number1)over(partition by number1) number2
       from a
      order by 1
      

  4.   

    with temp as
    (
    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