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
  • 相关阅读:
    hiho150周
    hdu1011
    hiho1055/hdu1561
    bat脚本启动exe并打开文件后退出 + 中文乱码
    hiho1080
    hiho1079
    java异常处理——基础篇
    找不到要编译的文件——path环境变量配置
    MVC——studying
    轻松搞定EasyUI
  • 原文地址:https://www.cnblogs.com/treemanfm/p/2616524.html
Copyright © 2011-2022 走看看