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. kibana使用日志时间进行排序

    kibana默认的是按照客户端的采集时间(@timestamp)进行排序,这往往不是我们所需要的,我们需要的是对日志实际时间进行排序,要解决这个问题,有很多种方法,可以在elasticsearch建立 ...

  2. windows 系统再重启后,USB口失效(鼠标、U盘都无法识别)的过程及解决方法

    今天都差点忘记写随笔.今天在工作中,将电脑重启了一次,悲催了.重启完成后,鼠标无法使用了.最初认为 鼠标的问题,就一直"砸",但后来换了鼠标,仍然不能使用,开始认为没这边简单,拿出 ...

  3. 牛客提高D2t2 幸运数字考试

    分析 预处理出所有合法数字 然后直接lower_bound查询即可 代码 #include<iostream> #include<cstdio> #include<cst ...

  4. 服务器-Web服务器-Tengine:Tengine 百科

    ylbtech-服务器-Web服务器-Tengine:Tengine 百科 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.它 ...

  5. 【黑科技】花几分钟和孩子动手DIY,即可用手机完成全息影像!

    http://baobao.sohu.com/20160902/n467277059.shtml [黑科技]花几分钟和孩子动手DIY,即可用手机完成全息影像! 杭州亲子圈2016-09-02 07:2 ...

  6. uni-app 云打包证书生成笔记

    一.android 云打包生成证书 1.jdk和jre安装,配置环境 2.在 C:\Users\Administrator\.android 文件夹下执行:keytool -genkey -alias ...

  7. PHP 中 Error 和 Exception 两种异常的特性及日志记录或显示

    PHP 文档: Error Exception 参考: 深入理解PHP原理之异常机制 我们什么时候应该使用异常 异常和错误 所有示例基于 PHP7. 应用中,关于错误的最佳实践是: 必须报告错误 开发 ...

  8. Vagrant 手册之 Provisioning - 概述

    原文地址 通过 Vagrant 中的 provisioner 配置程序,可以在使用 vagrant up 启动虚拟机时,在虚拟机上执行安装软件.更改配置等操作. box 通常是通用的,而每个项目总有自 ...

  9. Mac006--swithchosts安装

    Mac006--swithchosts安装 使用brew命令安装:brew cask install switchhosts 因为mac上,网络下载无法进行安装,所以应用brew命令安装. switc ...

  10. 19、NumPy——线性代数

    NumPy 线性代数 NumPy 提供了线性代数函数库 linalg,该库包含了线性代数所需的所有功能,可以看看下面的说明: 函数 描述 dot 两个数组的点积,即元素对应相乘. vdot 两个向量的 ...