1、mysql的执行顺序

  1. from
  2. on
  3. join
  4. where
  5. group by
  6. having
  7. select
  8. distinct  
  9. union    //UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
  10. order by
  11. 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的用法的更多相关文章

  1. SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序

    与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...

  2. 获取分组后统计数量最多的纪录;limit用法;sql执行顺序

    CREATE TABLE emp(id INT PRIMARY KEY,NAME VARCHAR(11),dep_id INT ,salary INT); CREATE TABLE dept(id I ...

  3. 0708关于理解mysql SQL执行顺序

    转自 http://www.jellythink.com/archives/924,博客比价清晰 我理解上文的是SQL执行顺序 总体方案.当你加入索引了以后,其实他的执行计划是有细微的变化,比方说刚开 ...

  4. MySQL中的索引、左连接、右连接、join、sql执行顺序

    逻辑架构: 1.连接层 2.服务层 3.引擎层(插拔式) 4.存储层 存储引擎: 常用的有:MyISAM.InnoDB 查看命令:show variables like '%storage_engin ...

  5. 初识SQL 执行顺序

    SQL不同于一般的程序代码,会按照一定的顺序进行执行,他的第一个执行始终从from开始执行,虽然Select出现在第一位置但是执行顺序 确不是在第一个.有时候可能大家写了很久的代码,不一定能够很好的理 ...

  6. [整]SQL执行顺序

    SQL的执行顺序: 第一步:FROM <left_table> <join_type> JOIN <right_table> ON <on_predicate ...

  7. SQL 执行顺序

    SQL 是一种声明式语言,与其他语言相比它的最大特点是执行顺序-并非按照语法顺序来执行.因此很多程序猿看到SQL就头疼,我之前也是这样,后来看到一篇文章后豁然开朗-地址. 理解了SQL的执行顺序无疑对 ...

  8. sql执行顺序整理

    sql的执行顺序,是优化sql语句执行效率必须要掌握的.各个数据库可能有细小的差别,但大体顺序是相同的,这里只做大致说明. 一.总体执行顺序 在sql语句执行之前,还有SQL语句准备执行阶段,这里不做 ...

  9. mysql sql执行顺序

    <pre name="code" class="html">mysql> explain select * from (select * fr ...

随机推荐

  1. Power Strings POJ - 2406

    Power Strings POJ - 2406 时限: 3000MS   内存: 65536KB   64位IO格式: %I64d & %I64u 提交 状态 已开启划词翻译 问题描述 Gi ...

  2. 后端技术杂谈10:Docker 核心技术与实现原理

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  3. crazyflie四轴飞行器

    源地址:http://www.bitcraze.se/2013/02/pre-order-has-started/ Crazyflie是一个开源的纳米四旋翼 来几张靓照 开发平台是开源的,所以原理图和 ...

  4. JS-Promise(使异步操作同步执行)

    单个异步操作同步 <div id="box"></div> <script> var box = document.querySelector( ...

  5. quick bi dashboard 控件样式控制。

    控件样式控制 1 想要的效果图 2 查询样式里面进行设置

  6. Selenium WebDriver Log4j打印执行日志

    在自动化测试脚本的执行过程中,使用log4j在日志文件中打印执行日志,用于监控和后续调试脚本. Log4j.xml 文件 <log4j:configuration xmlns:log4j=&qu ...

  7. 模拟赛毒瘤状压DP题:Kronican

    Kronican 内存限制:32 MiB 时间限制:2000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: cqbzgm 题目描述 Mislav有N个无限体积的杯子,每一个杯子中都 ...

  8. 机器学习实战笔记-5-Logistic回归

    Logistic回归 优缺点 适用范围 优点:计算代价不高,易于理解和实现. 缺点:容易欠拟合,分类精度可能不高. 适用于:数值型和标称型数据. 仅用于二分类 原理: 每个特征都乘以一个回归系数> ...

  9. mooc-IDEA alter enter--008

    十四.IntelliJ IDEA -alter enter 1.提示一:自动创建函数 2.提示二.list replace 等于 3.提示三.字符串formate或build 等于 等于 等于 4.实 ...

  10. 阿里云ECS服务器centos6.x安装docker问题盘点

    1.首先在centos6.x和centos7.x中yum安装docker的区分. centos6.x: yum install docker-io centos7.x: yum install doc ...