当前位置: 首页 > article >正文

1251. 平均售价(left join on后面加条件和where 后面加条件的区别、nvl()函数的使用)

1251. 平均售价

知识点:

1、left join on后面加条件和where 后面加条件的区别。

  

  • 数据库在通过连接两张表来返回记录时,都会生成一张中间的临时表,然后载将这张临时表返回给用户。
  • 在使用left join 时,on 和where 条件区别如下:
      a.on是在生成临时表的时候生成的条件,她不管oN的条件是否为真,都会返回左边表中的记录。用left join on 进行过滤的时候,on 条件只会对右表进行条件过滤,不会对左表有任何影响。

  b.where 条件是在生成临时表后,再对临时表进行过滤的条件。这是已经没有了left join 的含义(必须返回左表记录了)。where 会对结果集产生影响,所以会对左表产生影响。

2、nvl()函数与ifNull()函数的详解。

nvl(a,b)如果a不为null ,那么就取a。a为null ,那么就取b。

ORCLE

/* 解题思路:首先确定第二张表的产品的他们的售价,
就需要按照id 和售出时间来来关联价格表,得到该产品在对应时间段的售卖的价格 */

select c.product_id,round(nvl(sum(c.total)/sum(units),0),2) average_price from

 (select a.product_id,price*units total,b.units from prices a left join unitssold b  on a.product_id=b.product_id  and (b.purchase_date between a.start_date and a.end_date)
) c 
group by c.product_id

MYSQL

select a.product_id,
ifNULL(round(sum(units*price)/sum(units),2),0) average_price 
from prices a left join unitssold b  on a.product_id=b.product_id  
and (b.purchase_date between a.start_date and  a.end_date)
group by a.product_id

http://www.kler.cn/a/380790.html

相关文章:

  • Golang | Leetcode Golang题解之第535题TinyURL的加密与解密
  • 【Linux】从零开始使用多路转接IO --- epoll
  • 【双指针】【数之和】 LeetCode 633.平方数之和
  • vue+django+neo4j航班智能问答知识图谱可视化系统
  • 如果 MySQL 主库出现了问题,从库该何去何从呢?
  • 【网络】深入理解HTTP协议:请求方法、状态码与工作流程全解析
  • 如何在 IntelliJ IDEA 中调整 `Ctrl+/` 快捷键生成注释的位置
  • Percona XtraBackup数据备份方案
  • Java学习教程,从入门到精通,Java对象和类语法知识点(20)
  • pdf转图片
  • Angular解析本地json文件
  • [mysql]修改表和课后练习
  • How to initiate a conversation with a stranger?
  • 【Mysql 深入探索】InnoDB 实现事务的机制
  • qt QColor详解
  • 海报在线制作系统
  • MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名
  • 默认路由:实现内网所有网段流量走一条默认路由访问外网
  • redis:String字符串命令和内部编码
  • 教育机构如何利用知识中台进行数字教学
  • 第二十八章 Vue之自定义指令
  • go的template示例
  • pdf 添加页眉页脚,获取前五页
  • JavaScript、ES6 高频重点面试题
  • 【开源免费】基于SpringBoot+Vue.JS大学生就业招聘系统(JAVA毕业设计)
  • JS装备智能化储备管理体系优化改革