Product 表:

Column Name Type
product_id int
name varchar

product_id 是这张表的主键
表中含有产品 id 、产品名称。产品名称都是小写的英文字母,产品名称都是唯一的

Invoice 表:

Column Name Type
invoice_id int
product_id int
rest int
paid int
canceled int
refunded int

invoice_id 发票 id ,是这张表的主键
product_id 产品 id
rest 应缴款项
paid 已支付金额
canceled 已取消金额
refunded 已退款金额

问题

要求写一个SQL查询,对于所有产品,返回每个产品的产品名称,以及全部发票累计的总应缴款项、总已支付金额、总已取消金额、总已退款金额。

查询结果按 product_name 排序

示例:

Product 表:

product_id name
0 ham
1 bacon

Invoice table:

invoice_id product_id rest paid canceled refunded
23 0 2 0 5 0
12 0 0 4 0 3
1 1 1 1 0 1
2 1 1 0 1 1
3 1 0 1 1 1
4 1 1 1 1 0

Result 表:

name rest paid canceled refunded
bacon 3 3 3 3
ham 2 4 5 3
  • bacon 的总应缴款项为 1 + 1 + 0 + 1 = 3
  • bacon 的总已支付金额为 1 + 0 + 1 + 1 = 3
  • bacon 的总已取消金额为 0 + 1 + 1 + 1 = 3
  • bacon 的总已退款金额为 1 + 1 + 1 + 0 = 3
  • ham 的总应缴款项为 2 + 0 = 2
  • ham 的总已支付金额为 0 + 4 = 4
  • ham 的总已取消金额为 5 + 0 = 5
  • ham 的总已退款金额为 0 + 3 = 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/products-worth-over-invoices
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

本以为简简单单的一套题,没想到改动提交了第四次才完全对,小坑太多了。

select name,ifnull(sum(rest),0) rest,ifnull(sum(paid),0) paid,ifnull(sum(canceled),0) canceled,ifnull(sum(refunded),0) refunded
from invoice iright join product p using(product_id)
group by p.product_id
order by name

易错点

1.如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0,所以得要用ifnull()函数。
2.一定要是以product表为参照连接,因为invoice表中可能没有product表中所有的product;
3.group by 要以product表中的product_id为准,同2中原因,因为要求返回所有产品的相对应内容

leetcode简单之1677.发票中的产品金额*相关推荐

  1. 1677. 发票中的产品金额

    SQL架构 Product 表: +-------------+---------+ | Column Name | Type | +-------------+---------+ | produc ...

  2. LeetCode简单题之数组中的字符串匹配

    题目 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最 ...

  3. LeetCode简单题之字符串中的单词数

    题目 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John&q ...

  4. LeetCode简单题之二叉树中第二小的节点

    题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...

  5. LeetCode简单题之数组中两元素的最大乘积

    题目 给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值. 请你计算并返回该式的最大值. 示例 1: 输入:nums = ...

  6. LeetCode简单题之字符串中的最大奇数

    题目 给你一个字符串 num ,表示一个大整数.请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回.如果不存在奇数,则返回一个空字符串 "" . ...

  7. LeetCode简单题之数组中第 K 个独一无二的字符串

    题目 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串. 给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独一无二的字符串 .如果 少于 k 个独一无二的字符 ...

  8. LeetCode简单题之矩阵中的幸运数

    题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元素中最 ...

  9. LeetCode简单题之词典中最长的单词

    题目 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无答案, ...

最新文章

  1. 如何创建高性能、可扩展的Node.js应用?
  2. Coursera课程Python for everyone:chapter5
  3. STM32 Option Bytes位 重置为出厂设置
  4. 从0搭建一个Springboot+vue前后端分离项目(七)完善前台与后台的联系,完善功能接口
  5. leetCode-88. 合并两个有序数组
  6. iPhone磁盘空间/剩余空间代码
  7. SVM之交叉验证【转】
  8. 【README1】动态规划之解题思路
  9. 147页详述「结构在神经网络中的复兴」,图注意力网络一作博士论文公开
  10. C# 注册表控制++ Autorun after windows
  11. 四:Java+SpringBoot框架使用(两种携带参数的get接口开发)
  12. 【渝粤教育】电大中专电子商务网站建设与维护 (13)作业 题库
  13. Flash小游戏星空大战SpaceBattleGame 源代码
  14. linux两台电脑直连传数据,两台MAC电脑通过局域网快速传输文件
  15. 2021年连云港高考成绩查询,2021年连云港高考状元是谁分数多少分,历年连云港高考状元名单...
  16. 回收站文件清理了怎么恢复
  17. 基于RSA+AES 软件授权License
  18. 使用帕累托最优选择解释涌现现象
  19. pymssql数据库操作
  20. 鸿蒙(HarmonyOS)2.0方舟编译器官方网址开源地址

热门文章

  1. poj3347——正方形覆盖(区间覆盖)
  2. mongo 查询,修改,批量修改
  3. UWP项目设计器界面打开报错的解决办法
  4. 三口烧瓶规格有哪些_什么是三口烧瓶,应该如何制作 | | 化工资讯网
  5. SQLSERVER时间转换成字符串,去掉中划线
  6. 如何安装linux安装光盘中的软件包
  7. 洛谷—P3387 【模板】缩点
  8. uniapp 下载文件却变成了跳转
  9. 数据库之视图和触发器
  10. wkhtmltopdf参数详解