表:项目

+---+-----------+

|id | name |

+---+-----------+

| 1 | Product-A |

| 2 | Product-B |

+---+-----------+

表:订单

+---+-----+------------+

|id |price| orderer_id |

+---+-----+------------+

| 1 | 100 | 53 |

| 2 | 240 | 54 |

| 3 | 200 | 54 |

| 4 | 150 | 53 |

+---+-----+------------+

表:item_order

+----+--------+---------+----------+

| id |order_id| item_id | quantity |

+----+--------+---------+----------+

| 1 | 1 | 1 | 2 |

| 2 | 1 | 2 | 3 |

| 3 | 2 | 2 | 2 |

| 4 | 3 | 1 | 1 |

| 5 | 3 | 2 | 1 |

| 6 | 4 | 1 | 2 |

| 7 | 4 | 2 | 2 |

+----+--------+---------+----------+

提取什么:

对于每个orderer_id,number_of_order,total_quantity,total_price

+---------+-----------------+----------------+-------------+

| orderer | number_of_order | total_quantity | total_price |

+---------+-----------------+----------------+-------------+

| 53 | 2 | 9 | 250 |

| 54 | 2 | 4 | 440 |

+---------+-----------------+----------------+-------------+

目前的做法:

使用相关子查询

select orderer_id as orderer,

count(*) as number_of_order,

sum(select quantity from item_order where item_order.order_id = orders.id) as total_quantity,

sum(price) as total_price

from orders

order by orderer_id

可以通过将item_order与订单连接来解决吗?如果有,怎么样?

我想的另一种方法 –

>从订单中选择…

>从item_order中选择…

>根据应用层的要求进行组合和格式化

您可以假设,订单和item_order表会变得更大,哪种解决方案会更好?

最佳答案 由于从order到item_order的一对多关系,在子查询中执行聚合和在派生表中JOIN更容易:

SELECT o.orderer_id,

COUNT(o.id) AS number_of_order,

SUM(io.quantity) AS total_quantity,

SUM(o.price) AS total_price

FROM orders o

JOIN (SELECT order_id, SUM(quantity) AS quantity

FROM item_order

GROUP BY order_id) io ON io.order_id = o.id

GROUP BY o.orderer_id

输出:

orderer_id number_of_order total_quantity total_price

53 2 9 250

54 2 4 440

我希望这比相关子查询更快,因为必须对orders表中的每一行执行查询,而派生表的查询虽然更复杂,但只执行一次.我还希望这比在应用程序层执行两个查询和组合的选项更快.

mysql like 替代算法_mysql – 什么是替代连接查询相关推荐

  1. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  2. mysql交叉查询教程_史上最简单的 MySQL 教程(二十六)「连接查询(上)」

    连接查询连接查询:将多张表(大于等于 2 张表)按照某个指定的条件进行数据的拼接,其最终结果记录数可能有变化,但字段数一定会增加. 连接查询的意义:在用户查询数据的时候,需要显示的数据来自多张表. 连 ...

  3. MySQL之DQL(数据查询语言)- 表连接查询

    目录 一.简介 1.1.男生表 1.2.女生表 二.左连接查询(左外连接) 三.右连接查询(右外连接) 四.内连接查询 五.全连接查询 五.自连接查询 六.子查询 七.伪表查询 学习计划: 一.简介 ...

  4. mysql索引排序算法_MySQL中利用索引对数据进行排序的基础教程

    MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描.利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作.当索引的顺序与ORDER BY中的列顺 ...

  5. mysql的join算法_mysql的Join算法-阿里云开发者社区

    实为吾之愚见,望诸君酌之!闻过则喜,与君共勉 测试数据 CREATE TABLE `dept_emp` ( `emp_no` int(11) NOT NULL, `dept_no` char(4) N ...

  6. mysql死锁检测算法_MySQL InnoDB如何应付死锁

    死锁是事务处理型数据库系统的一个经典问题,但是它们并不是很危险的, 除非它们如此地频繁以至于你根本处理不了几个事务. 当因死锁而产生了回滚时,你通常可以在你的应用程序中重新发出一个事务即可. Inno ...

  7. MySQL语言的算法_MySQL知识整理

    写在前面的话:秋招来临,博主对MySQL知识进行了整理,全文包括数据库优化和数据库基础两部分 数据库优化 1.优化的目的 [1]     避免页面访问的出错(5xx错误:慢查询无法加载:阻塞无法提交) ...

  8. mysql死锁检测算法_MySQL 8 死锁检测脚本

    MySQL 8 记录死锁关的几张表有所变化,重新写一个脚本,便于在出现问题的时候快速处置问题. 死锁示意图 死锁相关的表 information_schema.INNODB_TRX `performa ...

  9. php mysql 排名算法_MySQL PHP:优化排名查询和计数子查询

    这是原始数据,并希望根据得分(count(tbl_1.id))对它们进行排名. [tbl_1] =========== id | name =========== 1 | peter 2 | jane ...

最新文章

  1. 一线互联网智能推荐系统架构演进
  2. 数据蒋堂 | 文件的性能分析
  3. 神经网络通过研究任意单个星系,揭示整个宇宙的组成
  4. C#教程6:流控制语句
  5. linux:命令常用操作
  6. bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案
  7. IntentService使用
  8. java reflector_Java DefaultReflectorFactory类代码示例
  9. Windows C++界面库
  10. 【服务器】服务器运维必备软件;服务器安装环境、运维教程
  11. 简述冯诺依曼计算机体系结构
  12. git.exe push --progress origin master:master To https://192.168.3.145:10102/r/~lifan/tms-vue.git !
  13. 计算机中丢失aclst16,Win10系统运行CAD2006提示计算机中丢失ac1st16.dll怎么办
  14. Android流量统计
  15. 解决Microsoft Office SDX Helper服务占用率高
  16. hdu 1873 看病要排队
  17. 编程技巧│提高 Javascript 代码效率的技巧
  18. python打印九九乘法口诀_使用Python打印九九乘法口诀表
  19. PFSO-T5,一种OLED材料
  20. 主流配置中心的比较 Spring Cloud Config、Apollo、Nacos

热门文章

  1. torch max 判断与筛选
  2. pytorch nan解决方法笔记
  3. 矩阵y=wx+b 位置
  4. idea provided和compile区别
  5. Ubuntu 搜狗输入法不能输入中文解决
  6. valgrind安装使用
  7. 为什么说 Java 中只有值传递?
  8. oracle cols user_tab_columns,user_tab_cols和user_tab_columns的区别
  9. Linux内核中的进程等待与其实现解析
  10. elasticsearch 分页_[Springboot实战系列]整合ElasticSearch实现数据模糊搜索