示例1:测试数据:

SQL> select * from score;

ID CLASS STUDENT COURSE      SCORE

---------- ----- ------- ------ ----------

1 一 张三 数学           90

2 一 张三 语文           89

3 一 李四 数学           26

4 一 李四 语文           31

5 二 王五 数学           90

6 二 王五 语文           80

7 二 赵六 数学           70

8 二 赵六 语文           79

8 rows selected

实现一个SQL,要求统计一二班考试总人数,总成绩,语文考试总成绩,参加考试人数?

解:

SQL> select class,

2         sum(score),

3         count(distinct student),

4         sum(case

5               when course = '语文' then

6                score

7               else

8                null

9             end)

10    from score

11   group by class;

CLASS SUM(SCORE) COUNT(DISTINCTSTUDENT)   SUM(CASEWHENCOURSE='语文'THENS

----- ---------- ---------------------- ------------------------------

二           319                      2                            159

一           236                      2                            120

SQL> select t1.class,

2         sum(t1.score),

3         count(distinct t1.student),

4         (select sum(t2.score)

5            from score t2

6           where t2.course = '语文'

7             and t2.class = t1.class)

8    from score t1

9   group by class;

CLASS SUM(T1.SCORE) COUNT(DISTINCTT1.STUDENT) (SELECTSUM(T2.SCORE)FROMSCORET

----- ------------- ------------------------- ------------------------------

二              319                         2                            159

一              236                         2                            120

在这个子查询中,case when相当于一个子查询,在group by class分组的基础上进行二次筛选,最终可以求出语文总成绩。

示例二:

已知四张表,第一张为用户表,里面有 小明 id为1,小红 id为2,小王 id为3, 小明 id为4, 小张 id为5这五个人。
第二张为数学作业表,通过用户id,然后用count可以获取每个用户数学作业完成总数,
第三张为语文作业表,通过用户id,然后用count可以获取每个用户语文作业完成总数,
第四张为英语作业表,通过用户id,然后用count可以获取每个用户英语作业完成总数,
现在需要获取五个用户的数学 ,语文, 英语 三门作业完成的总数,然后排出前三名,
返回给后台这三个人的姓名,和完成总数

解:

select *

from (select t.name, (m + y + e) as sum

from (select t1.name,

(select count(1) from t2 where t1.id = t2.id) as m,

(select count(1) from t3 where t1.id = t3.id) as y,

(select count(1) from t4 where t1.id = t4.id) as e

from t1) t

order by sum desc)

where rownum < 4;

一个1级分组基础上同时进行2级分组的SQL面试题的更多相关文章

  1. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  2. 在Bootstrap开发框架基础上增加WebApi+Vue&Element的前端

    基于Metronic的Bootstrap开发框架是我们稍早一点的框架产品,界面部分采用较新的Bootstrap技术,框架后台数据库支持Oracle.SqlServer.MySql.PostgreSQL ...

  3. Replication的犄角旮旯(六)-- 一个DDL引发的血案(上)(如何近似估算DDL操作进度)

    <Replication的犄角旮旯>系列导读 Replication的犄角旮旯(一)--变更订阅端表名的应用场景 Replication的犄角旮旯(二)--寻找订阅端丢失的记录 Repli ...

  4. C#基础-css行内元素、块级元素基础

    一.行内元素与块级元素 块级元素列表 <address> 定义地址 <caption> 定义表格标题 <dd> 定义列表中定义条目 <div> 定义文档 ...

  5. 【JavaEE】SSH+Spring Security基础上配置AOP+log4j

    Spring Oauth2大多数情况下还是用不到的,主要使用的还是Spring+SpringMVC+Hibernate,有时候加上SpringSecurity,因此,本文及以后的文章的example中 ...

  6. 在cocos code ide的基础上构建自己的lua开发调试环境

    对于一种语言,其所谓开发调试环境, 大体有以下两方面的内容: 1.开发, 即代码编写, 主要是代码提示.补齐, 更高级一点的如变量名颜色等. 2.调试, 主要是运行状态下断点.查看变量.堆栈等. 现在 ...

  7. 【Xamarin开发 Android 系列 6】 Android 结构基础(上)

    原文:[Xamarin开发 Android 系列 6] Android 结构基础(上) 前面大家已经熟悉了什么是Android,而且在 [Xamarin开发 Android 系列 4] Android ...

  8. 在Livemedia的基础上开发自己的流媒体客户端

    一.背景 二.Livemedia框架介绍 1.总体框架 2.客户端框架 2.1 客户端openRTSP流程 2.2增加一种新的媒体 2.2.1增加媒体的format 2.2.2 新媒体需要考虑的问题 ...

  9. 使用mysqlbinlog工具的基础上及时恢复数据的位置或点

    使用mysqlbinlog工具的基础上及时恢复的位置或点 MySQL备份一般采取完全备份的形式加日志备份.让我们运行一个完整备份,每天.每小时运行二进制日志备份. 这样在MySQL Server故障后 ...

随机推荐

  1. UnDistracted for Mac(集中注意力辅助工具)破解版安装

    1.软件简介    UnDistracted 是 macOS 系统上一款可以帮助我们集中注意力的辅助工具,让我们在 mac 电脑上工作更加集中注意力,提高工作效率,隐藏所有文件或是文件夹窗口.隐藏所有 ...

  2. Easyui datagrid 特殊处理,记录笔记

    1. 特殊的单元格样式 columns中 { field: , styler: function (value, row, index) { ') { return 'background-color ...

  3. 第三部分:Android 应用程序接口指南---第二节:UI---第十章 拖放

    第10章 拖放 使用Android的拖放框架,允许用户通过一个图形化的拖放动作,把数据从当前布局中的一个视图上转移到另一个视图上.这个框架包含了一个拖动事件类,拖动监听器和一些辅助的方法和类. 虽然这 ...

  4. 【iCore4 双核心板_ARM】例程七:WWDG看门狗实验——复位ARM

    实验原理: STM32内部包含窗口看门狗,通过看门狗可以监控程序运行,程序运行错误时,未在 规定时间喂狗(提前或超时),自动复位ARM,本实验通过按键按下,停止喂狗,从而产 生复位. 核心代码: in ...

  5. hdoj:2033

    #include <iostream> #include <string> using namespace std; int main() { int n; int h, m, ...

  6. EventBus vs Otto vs Guava--自定义消息总线

    同步发表于http://avenwu.net/ioc/2015/01/29/custom_eventbus Fork on github https://github.com/avenwu/suppo ...

  7. An SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene50' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classp

    背景介绍: 当ES中guava库与hive等组件的库冲突时,对Elasticsearch库进行shade,relocate解决库冲突问题. 当使用"org.apache.maven.plug ...

  8. Redis系统性介绍

    虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍.是一个很不错的Redis入门 ...

  9. (笔记)Linux内核学习(一)之内核介绍

    内核与操作系统: 内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中: 操作系统与底层硬件设备交互和为运行应用程序提供执行环境. Linux内核与微内 ...

  10. Java如何读取和下载网页?

    在Java编程中,如何读取和下载网页? 以下示例显示如何使用net.URL类的URL()构造函数来读取和下载网页. package com.yiibai; import java.io.Buffere ...