返回介绍

solution / 1600-1699 / 1677.Product's Worth Over Invoices / README

发布于 2024-06-17 01:03:15 字数 2705 浏览 0 评论 0 收藏 0

1677. 发票中的产品金额

English Version

题目描述

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

解法

方法一

# Write your MySQL query statement below
SELECT
  name,
  IFNULL(SUM(rest), 0) AS rest,
  IFNULL(SUM(paid), 0) AS paid,
  IFNULL(SUM(canceled), 0) AS canceled,
  IFNULL(SUM(refunded), 0) AS refunded
FROM
  Product
  LEFT JOIN Invoice USING (product_id)
GROUP BY product_id
ORDER BY name;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文