leetcode简单之1677.发票中的产品金额*
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.发票中的产品金额*相关推荐
- 1677. 发票中的产品金额
SQL架构 Product 表: +-------------+---------+ | Column Name | Type | +-------------+---------+ | produc ...
- LeetCode简单题之数组中的字符串匹配
题目 给你一个字符串数组 words ,数组中的每个字符串都可以看作是一个单词.请你按 任意 顺序返回 words 中是其他单词的子字符串的所有单词. 如果你可以删除 words[j] 最左侧和/或最 ...
- LeetCode简单题之字符串中的单词数
题目 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my name is John&q ...
- LeetCode简单题之二叉树中第二小的节点
题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...
- LeetCode简单题之数组中两元素的最大乘积
题目 给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值. 请你计算并返回该式的最大值. 示例 1: 输入:nums = ...
- LeetCode简单题之字符串中的最大奇数
题目 给你一个字符串 num ,表示一个大整数.请你在字符串 num 的所有 非空子字符串 中找出 值最大的奇数 ,并以字符串形式返回.如果不存在奇数,则返回一个空字符串 "" . ...
- LeetCode简单题之数组中第 K 个独一无二的字符串
题目 独一无二的字符串 指的是在一个数组中只出现过 一次 的字符串. 给你一个字符串数组 arr 和一个整数 k ,请你返回 arr 中第 k 个 独一无二的字符串 .如果 少于 k 个独一无二的字符 ...
- LeetCode简单题之矩阵中的幸运数
题目 给你一个 m * n 的矩阵,矩阵中的数字 各不相同 .请你按 任意 顺序返回矩阵中的所有幸运数. 幸运数是指矩阵中满足同时下列两个条件的元素: 在同一行的所有元素中最小 在同一列的所有元素中最 ...
- LeetCode简单题之词典中最长的单词
题目 给出一个字符串数组words组成的一本英语词典.从中找出最长的一个单词,该单词是由words词典中其他单词逐步添加一个字母组成.若其中有多个可行的答案,则返回答案中字典序最小的单词. 若无答案, ...
最新文章
- 如何创建高性能、可扩展的Node.js应用?
- Coursera课程Python for everyone:chapter5
- STM32 Option Bytes位 重置为出厂设置
- 从0搭建一个Springboot+vue前后端分离项目(七)完善前台与后台的联系,完善功能接口
- leetCode-88. 合并两个有序数组
- iPhone磁盘空间/剩余空间代码
- SVM之交叉验证【转】
- 【README1】动态规划之解题思路
- 147页详述「结构在神经网络中的复兴」,图注意力网络一作博士论文公开
- C# 注册表控制++ Autorun after windows
- 四:Java+SpringBoot框架使用(两种携带参数的get接口开发)
- 【渝粤教育】电大中专电子商务网站建设与维护 (13)作业 题库
- Flash小游戏星空大战SpaceBattleGame 源代码
- linux两台电脑直连传数据,两台MAC电脑通过局域网快速传输文件
- 2021年连云港高考成绩查询,2021年连云港高考状元是谁分数多少分,历年连云港高考状元名单...
- 回收站文件清理了怎么恢复
- 基于RSA+AES 软件授权License
- 使用帕累托最优选择解释涌现现象
- pymssql数据库操作
- 鸿蒙(HarmonyOS)2.0方舟编译器官方网址开源地址