zoukankan      html  css  js  c++  java
  • 关于Oracle分组取最大值

    先以一个淘宝的题目作为开始:

    有一张表t_stu;其中三个字段:name,gender,grade;要求用一条sql语句查出男生前3名和女生前3名。

    create table t_stu(name varchar2(100),sex varchar2(10),grade number);
    --添加的测试数据如下
    jack    boy    100
    lili    girl    90
    lucy    girl    98
    tom    boy    99
    lilei    boy    98
    hanmeimei    girl    97
    wang    boy    89
    green    girl    88

    立刻可以先排序,然后使用rownum选择出来,代码如下:

    select * from (
    select t.*,rownum as rid
    from t_stu t
    where sex = 'boy'
    order by grade desc )
    where rid <= 3
    union 
    select * from (
    select t.*,rownum as rid
    from t_stu t
    where sex = 'girl'
    order by grade desc )
    where rid <= 3

    如果我们的需求有变化,查询每个班级中的第一名的学生成绩,假设班级很多,要求使用group by 分组,那么该如何写出SQL语句呢。

    扩展我们的t_stu表,增加一个班级字段,如下:

    alter table t_stu add class varchar2(10);
    --修改测试数据
    jack    boy    100    1
    lili    girl    90    1
    lucy    girl    98    2
    tom    boy    99    2
    lilei    boy    98    3
    hanmeimei    girl    97    3
    wang    boy    89    4
    green    girl    88    4
  • 相关阅读:
    poj 3159 Candies
    强连通分量——Tarjan算法
    nyoj 次方求模
    nyoj 快速查找素数
    nyoj 光棍节的快乐
    拓扑排序
    快速幂取模
    nyoj 最大素因子
    素数打表
    nyoj 数的长度
  • 原文地址:https://www.cnblogs.com/treemanfm/p/2616524.html
Copyright © 2011-2022 走看看