SQL查询——同一张表的横向与纵向同时比较
表名:student
表结构及数据:
+----+--------+---------+------+------------+--------------+---------+
| id | name | english | math | birthday | native_place | chinese |
+----+--------+---------+------+------------+--------------+---------+
| 1 | 潘怡茹 | 86 | 91 | 1990-01-01 | 上海 | 97 |
| 2 | 刘濮松 | 88 | 68 | 1990-02-01 | 上海 | 96 |
| 3 | 刘吉如 | 85 | 53 | 1990-03-01 | 上海 | 70 |
| 4 | 李岩珂 | 85 | 70 | 1990-04-01 | 上海 | 96 |
| 5 | 王晓博 | 85 | 79 | 1990-05-01 | 上海 | 46 |
| 6 | 李帅旭 | 79 | 76 | 1990-06-01 | 上海 | 97 |
| 7 | 李静瑶 | 89 | 61 | 1990-07-01 | 上海 | 92 |
| 8 | 金纾凡 | 80 | 43 | 1990-08-01 | 上海 | 83 |
| 9 | 秦梓航 | 57 | 46 | 1990-09-01 | 上海 | 86 |
| 10 | 关颖利 | 80 | 77 | 1991-01-01 | 上海 | 84 |
+----+--------+---------+------+------------+--------------+---------+
需求:在该表中查出最偏科的学生姓名。
分析:
这张表中有三个科目:English、math、Chinese
1-求出三个科目的分数差(求绝对值)——使用abs(math-english) abs(chinese-english) abs(math-chinese)
2-求出整个班级中 数学与英语的分数差、语文与英语的分数差、数学与英语的分数差 的最大值——max(abs(math-english) )、 max(abs(chinese-english)) 、 max(abs(math-chinese))
3-在2的结果中查找出数值最大的值
4-在student表中搜索
数学与英语的分数差 等于 (3-的结果)
语文与英语的分数差 等于 (3-的结果)
数学与英语的分数差 等于 (3-的结果)
如此可以查找出最偏科的学生姓名。
SQL代码:
select name from student
where
abs(chinese-math) in (select max(tmp.score)
from (
select max(abs(s1.chinese-s1.math)) score from student s1
union select max(abs(s2.chinese-s2.english)) score from student s2
union select max(abs(s3.english-s3.math)) score from student s3
) tmp)
or
abs(chinese-english)in (select max(tmp1.score)
from (
select max(abs(s1.chinese-s1.math)) score from student s1
union select max(abs(s2.chinese-s2.english)) score from student s2
union select max(abs(s3.english-s3.math)) score from student s3
) tmp1)
or
abs(english-math) in (select max(tmp2.score)
from (
select max(abs(s1.chinese-s1.math)) score from student s1
union select max(abs(s2.chinese-s2.english)) score from student s2
union select max(abs(s3.english-s3.math)) score from student s3
) tmp2);
SQL查询——同一张表的横向与纵向同时比较的更多相关文章
- hive sql 查询一张表的数据不在另一张表中
有时,我们需要对比两张表的数据,找到在其中一张表,不在另一张表中的数据 hql 如下: SELECT * FROM (SELECT id FROM a WHERE dt = '2019-03-17' ...
- 查询某张表被哪些存储过程或者视图用到的sql语句
/*查询某张表被哪些存储过程或者视图用到的sql语句*/select distinct object_name(id) from syscomments where id in (select id ...
- Oracle和MSSQL查询有多少张表
Oracle: SELECT count(*) FROM user_tables MSSQL: ) FROM sysobjects WHERE xtype='U' 这种方法可能会把dbo.dtprop ...
- mysql左连接右连接(查询两张表不同的数据)
有两张表:一张A表he一张B表 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 :right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: ...
- oracle查询某张表的外键,并用 truncate 命令有外键的表中的数据
注:本文来源于<oracle查询某张表的外键(最终解决办法)> 一:几个查询表外键的脚本 select b.table_name, b.column_name from user_cons ...
- SQL数据库查询一张表新建一个排序字段并根据某列的排序存储排序值
现在有一张表如下Id Name Age Classify Score1 张一 18 一班 122 张二 17 二班 19 3 张三 19 三班 30 我跟据他们的分数进行排名 再去新建一个列存储排序值 ...
- SQL update语句 更新和查询同一张表 冲突
#update 和 select在同一张表的时候会显示冲突 报错信息: [Err] 1093 - You can't specify target table 'tb_a' for update i ...
- oracle中查询某张表都被哪些表参照了
起因: 系统测试的时候发现如果某条记录已经被引用了,这个时候删除这条记录会引起数据不一致,系统会报错.比如警员信息,在考勤记录表里会引用警员ID,如果考勤记录表中已经存在这个警员ID了,这时从警员表中 ...
- MySQL 查询多张表中相同字段的最大值
MySql : 有N张表,N未知,每张表都有一个字段(id),每张表的字段结构不完全一样,如何查询所有表里面所有id的最大值?如下图所示: 对上面三张表进行操作的话,结果应该为:9 SQL语句: se ...
随机推荐
- adb logcat 基本用法
入门android ,至少需要了解 adb 吧,那么打 log 也是必不可少的了. 下面简单介绍一下 adb logcat 基本用法: Usage: logcat [options] [filters ...
- TinyFrame开篇:基于CodeFirst的ORM
前言 做项目的这段时间,由于比较忙,一直没有机会闲下来思考.正好趁目前手头活儿轻松点,就花了一两天时间搭建了一个比较简单的框架,名称暂时就叫做:TinyFrame吧.顾名思义,就是微框架的意思.虽然这 ...
- Java多线程之Runable与Thread
Java多线程是Java开发中的基础内容,但是涉及到高并发就有很深的研究可做了. 最近看了下<Java并发实战>,发先有些地方,虽然可以理解,但是自己在应用中很难下手. 所以还是先回顾一下 ...
- window.location.href = window.location.href 跳转无反应 a 超链接 onclick 点击跳转无反应
错误写法 , 主要是在 href="#"这里 <a href="#" id="send" onclick="return b ...
- 端口被占用的解决方案 sql server 10048 错误
一大早发现sql server服务无法启动,10048错误,一查是端口占用. 先找到哪个进程,结束即可. cmd命令, netstat /ano|findset "1433" 出现 ...
- [BZOJ2654]tree(二分+MST)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2654 分析:此题很奇葩,我们可以给所有白边加上一个权值mid,那么在求得的MST中白边 ...
- LVS+Redis部署手册
Redis是一个开源,先进的key-value存储,并用于构建高性能,可扩展的Web应用程序的完美解决方案. Redis从它的许多竞争继承来的三个主要特点: Redis数据库完全在内存中,使用磁盘仅用 ...
- Java网络编程——概述
一.网络模型 OSI七层模型 应用层 表示层 会话层 传输层: 网络层: 链路层 物理层:比特流 TCP/IP四层模型 应用层 传输层:数据包,TCP/UDP 网络层:数据帧 物理层:比特流 二.网络 ...
- mysql常用方法学习
环境 create table phople ( id int(11) not null primary key auto_increment, name char(20) not null, sex ...
- 网页中常用HTML字符实体
摘要: 一些字符在 HTML 中拥有特殊的含义,比如小于号 () 用于定义 HTML 标签的开始.如果我们希望浏览器正确地显示这些字符,我们必须在 HTML 源码中插入字符实体. 字符实体有三部分:一 ...