SQL执行顺序和coalesce以及case when的用法
1、mysql的执行顺序
- from
- on
- join
- where
- group by
- having
- select
- distinct
- union //UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
- order by
- limit
注意:select distinct name from t1 能消除重复记录,但只能取一个字段,现在要同时取id,name这2个字段的值。
select distinct id,name from t1 可以取多个字段,但只能消除这2个字段值全部相同的记录
limit y 分句表示: 读取 y 条数据
limit x, y 分句表示: 跳过 x 条数据,读取 y 条数据
limit y offset x 分句表示: 跳过 x 条数据,读取 y 条数据
limit n,m表示从第n+1条开始,取m条.limit 2,3表示取3,4,5条.
表teacher(id,dept,name,phone,mobile)
表dept(id,name)
teacher.dept=dept.id
2、SQL中coalesce函数的用法(也相当于HiveQL中nvl函数的用法):
其参数格式如下: COALESCE ( expression,value1,value2……,valuen)
COALESCE()函数的第一个参数expression为待检测的表达式,而其后的参数个数不定。
COALESCE()函数将会返回包括expression在内的所有参数中的第一个非空表达式。如果
expression不为空值则返回expression;否则判断value1是否是空值,如果value1不为空值则返
回value1;否则判断value2是否是空值,如果value2不为空值则返回value3;……以此类推,
例1:Use the number '07986 444 2266' if there is no number given. Show teacher name and mobile number or '07986 444 2266'
select name,COALESCE(mobile,'07986 444 2266')
from teacher
结果如下:
3、case when的用法:
例1:
表user(id,name,sex)
select u.id,u.name,u.sex,
(case u.sex
when 1 then '男'
when 2 then '女'
else '空的'
end
)性别
from user u;
例2:表game(id,mdate,stadium,team1,team2)
表goal(matchid,teamid,player,gtime)
查询中列出了每个目标。如果是team1的进球,那么1出现在score1中,否则为0。您可以对这一列进行求和,以得到team1进球的总数。
SELECT mdate,
team1,
SUM(CASE WHEN teamid=team1 THEN 1 ELSE 0 END) score1, //SUM(CASE teamid WHEN team1 THEN 1 ELSE 0 END) score1,
team2,
SUM(CASE WHEN teamid=team2 THEN 1 ELSE 0 END) score2 //SUM(CASE teamid WHEN team2 THEN 1 ELSE 0 END) score2
FROM game LEFT JOIN goal ON game.id = matchid
group by mdate,team1,team2
结果如下:
4、case when 的列转行
按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
方法一(正确答案)
select S ,max(case C when '01' then score else 1 end) '01',
max(case C when '02' then score else 0 end)'02',
max(case C when '03' then score else 0 end)'03',AVG(score)平均分 from sc
group by S order by AVG(score) desc;
比较
select S ,sum(case C when '01' then score else 1 end) '01',
sum(case C when '02' then score else 0 end)'02',
sum(case C when '03' then score else 0 end)'03',AVG(score)平均分 from sc
group by S order by AVG(score) desc;
数据
解析:方法一:首先按照学号分组,第一行C=01,第二行C=02,第三行C=03,故学号为07的学生第二个字段为MAX(0,0,0)同理之后的字段也是max(0,89,0)和max(0,0,98).
比较语句:学号为01的学生的第二个字段为sum(0,1,1)=2。以此类推。
结果分别与下图所示:
SQL执行顺序和coalesce以及case when的用法的更多相关文章
- SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序
与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...
- 获取分组后统计数量最多的纪录;limit用法;sql执行顺序
CREATE TABLE emp(id INT PRIMARY KEY,NAME VARCHAR(11),dep_id INT ,salary INT); CREATE TABLE dept(id I ...
- 0708关于理解mysql SQL执行顺序
转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开 ...
- MySQL中的索引、左连接、右连接、join、sql执行顺序
逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...
- 初识SQL 执行顺序
SQL不同于一般的程序代码,会按照一定的顺序进行执行,他的第一个执行始终从from开始执行,虽然Select出现在第一位置但是执行顺序 确不是在第一个.有时候可能大家写了很久的代码,不一定能够很好的理 ...
- [整]SQL执行顺序
SQL的执行顺序: 第一步:FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate ...
- SQL 执行顺序
SQL 是一种声明式语言,与其他语言相比它的最大特点是执行顺序-并非按照语法顺序来执行.因此很多程序猿看到SQL就头疼,我之前也是这样,后来看到一篇文章后豁然开朗-地址. 理解了SQL的执行顺序无疑对 ...
- sql执行顺序整理
sql的执行顺序,是优化sql语句执行效率必须要掌握的.各个数据库可能有细小的差别,但大体顺序是相同的,这里只做大致说明. 一.总体执行顺序 在sql语句执行之前,还有SQL语句准备执行阶段,这里不做 ...
- mysql sql执行顺序
<pre name="code" class="html">mysql> explain select * from (select * fr ...
随机推荐
- 【HDOJ6629】string matching(exkmp)
题意:给定一个长为n的字符串,求其每个位置开始于其自身暴力匹配出相同或不同的结果的总比较次数 n<=1e6 思路:exkmp板子 #include<bits/stdc++.h> us ...
- (转)dial tcp 10.96.0.1:443: getsockopt: no route to host --- kubernetes(k8s)DNS 服务反复重启
转:https://blog.csdn.net/shida_csdn/article/details/80028905 kubernetes(k8s)DNS 服务反复重启解决: k8s.io/dns/ ...
- EZOJ #393加倍的飞机
分析 从大到小考虑每个点 记录一个连通块中选了选了几个 如果选的小于siz则直接选否则不选 代码 #include<bits/stdc++.h> using namespace std; ...
- cmath模块——复数域数学函数模块
cmath——复数域数学函数模块 转自:https://blog.csdn.net/zhtysw/article/category/7511293 该模块属于内置模块,随时可以调用.它提供了数学函数在 ...
- 编程语言-Python2-问题整理
InsecureRequestWarning: Unverified HTTPS request is being made. import urllib3 urllib3.disable_warni ...
- 04 - Jmeter4.x聚合报告,测试报告以及测试报告用法于解析
聚合报告 添加方式 Thread Group → add → Listener → Aggregate Report 内容解析 lable: 指代当前Samples ...
- datepart()函数的使用
/* datepart()函数的使用 * datepart()函数可以方便的取到时期中的各个部分 *如日期:2006-07--02 18:15:36 ...
- exports、module.exports和export、export default到底是咋回事
地址1:https://segmentfault.com/a/1190000010426778 地址2:https://blog.csdn.net/caixiaowang/article/detail ...
- Linux固定ip配置
第一步:查看网络信息 [root@localhost ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu ...
- #python# 代理过程中遇到的error
做一下总结 urllib.error.HTTPError: HTTP Error 503: Too many open connections TimeoutError: [WinError 1006 ...