虽然看过,但是在项目中遇到一个SQL,要求给用户按投票数排序,票数相等时按照先达到票数的时间排序,一开始竟然不会写????后来从网上找了一圈

SQL UID,SUM(VOTE) AS VOTES FROM TABLE WHERE STAR=? GROUP BY UID ORDER BY VOTES DESC,MAX(CREATE_TIME) ASC;

稍微解释一下:首先按照where找到要排序的粉丝,然后GROUP BY uid将用户分组,同时SUM(VOTE)计算出每个用户的总票数,并在ORDER BY 里按DESC排序,若票数相等则再按create_time排序,之所以用MAX(create_time)也是为了找出用户最后一票的时间,然后比较用户们最后一票的时间,当然是小的是靠前的了。就完成了查询。

这里涉及了一个GROUP BY的点,GROUP BY后会为每个组只保留一条数据,所以这时可以使用聚合函数来筛选出想要的数据,这里就是使用SUM 和 MAX筛选出想要的结果。

下面的结果是从网上摘录的,做个记录吧先。

下面我们来具体分析一下查询处理的每一个阶段

  1. FORM: 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1

  2. ON: 对虚表VT1进行ON筛选,只有那些符合<join-condition>的行才会被记录在虚表VT2中。

  3. JOIN: 如果指定了OUTER JOIN(比如left join、 right  join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug  from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为 止。

  4. WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。

  5. GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.

  6. CUBE | ROLLUP: 对表VT5进行cube或者rollup操作,产生表VT6.

  7. HAVING: 对虚拟表VT6应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT7中。

  8. SELECT: 执行select操作,选择指定的列,插入到虚拟表VT8中。

  9. DISTINCT: 对VT8中的记录进行去重。产生虚拟表VT9.

  10. ORDER BY: 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.

  11. LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

转载于:https://blog.51cto.com/fulin0532/2336763

SQL 的执行顺序,记录一下。相关推荐

  1. 25、Sql语句执行顺序

    sql语句定义和执行顺序 摘自<MySQL技术内幕:SQL编程> sql语句定义的顺序 (1) SELECT (2)DISTINCT<select_list> (3) FROM ...

  2. 【转】SQL 语句执行顺序

    From:http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解:https://wenku.baidu.com/view/398 ...

  3. SQL 语句执行顺序

    From:http://www.jellythink.com/archives/924 Oracle-SQL语句执行原理和完整过程详解:https://wenku.baidu.com/view/398 ...

  4. mysql 执行顺序 SQL语句执行顺序分析

    最近在做一个数据库的大作业,算是复习了下MySql里面比较复杂的一些语句的用法,如Left Join之类的.在这里就不对具体语法进行记录了,希望能在以后经常用到,而不是隔好长时间用一次.在这里就记录下 ...

  5. sql语句执行顺序及简单优化

    SQL的执行顺序 (1)from    (表关联,是从后往前.从右到左解析的 ) 所以尽量把数据量大的表放在最左边来进行关联 (2) on     需要从哪个数据表检索数据 (3) join   多表 ...

  6. 整理:sql server 中sql语句执行顺序

    原文地址为: 整理:sql server 中sql语句执行顺序 SQL Server 查询处理中的各个阶段(SQL执行顺序) SQL 不同于与其他编程语言的最明显特征是处理代码的顺序.在大数编程语言中 ...

  7. MySql的sql语句执行顺序

    MySql的sql语句执行顺序 FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 JOIN table2 所以先是确定表 ...

  8. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序

    (8)     DISTINCT (1)     FROM (3)      JOIN (2)     ON (4)     WHERE (5)     GROUP BY (6)     HAVING ...

  9. 带left join 的sql的执行顺序

    1.笛卡尔积(Cartesian product) 顾名思义, 这个概念得名于笛卡儿. 在数学中,两个集合 X 和 Y 的笛卡儿积(Cartesian product),又称直积,表示为 X × Y, ...

  10. php语句执行顺序,sql语句执行顺序是什么

    sql语句执行顺序:1.最先执行from tab:2.where语句是对条件加以限定:3.分组语句[group by-- having]:4.聚合函数:5.select语句:6.order by排序语 ...

最新文章

  1. sscanf简单用法
  2. 走向REST:将Tomcat与Spring和JAX-RS嵌入(Apache CXF)
  3. Jenkins中切换devtoolset
  4. Perl 安装及模组安装方法【windows】
  5. Flex读取非UTF-8中文数据乱码问题的解决方案
  6. 笔记.cloudflare 的橙色云代理ssl坑
  7. Android 9.0 HIDL接口添加
  8. openpythonxl_常用模块之openpyxl (python3入门)
  9. 建立项目接口文档_一个 SpringBoot 项目该包含哪些?
  10. 精通innodb引擎_《MySQL技术内幕:InnoDB存储引擎》PDF 下载
  11. win7计算机开机启动项设置,开机启动项,教您Win7开机启动项怎么设置
  12. 思科交换机配置dhcp
  13. 试读《线上幽灵:世界头号黑客米特尼克自传》
  14. 解决:Adobe Flash Player已不再受支持
  15. python requests 异步调用_python - 如何使用requests_html异步获取()URL列表? - 堆栈内存溢出...
  16. 永洪BI配置测试及遇到的一些问题
  17. TypeError: slice indices must be integers 数组索引必须是整数
  18. 网络通是免费的内网端口映射软件
  19. 微信接入指南进入开发者模式
  20. 自动更换壁纸的小软件:likecan

热门文章

  1. linux下单节点oracle数据库间ogg搭建
  2. 解决webApiMessageAn error has occurred./Message不能写多个Get方法的问题
  3. Echange配置企业邮件收发策略
  4. Linux的kickstart安装详解
  5. 「小程序JAVA实战」小程序视频上传方法的抽象复用(57)
  6. [洛谷P4721]【模板】分治 FFT
  7. 实验1 查看CPU和内存、用机器指令和汇编指令编程
  8. df命令、du命令、磁盘分区(fdisk命令)
  9. js 外部文件加载处理
  10. 通过代码获取Bitmap图片资源