跳转至

3050. 披萨配料成本分析 🔒

题目描述

表:Toppings

+--------------+---------+ 
| Column Name  | Type    | 
+--------------+---------+ 
| topping_name | varchar | 
| cost         | decimal |
+--------------+---------+
topping_name 是这张表的主键。
这张表的每一行包含配料名和配料的花费。

编写一个解决方案根据给定的配料表来计算 所有可能的 3 种配料 披萨组合的 总花费。总花费必须 舍入2整数

注意:

  • 不要 包含 重复 配料的披萨。例如,‘Pepperoni, Pepperoni, Onion Pizza’。
  • 配料 必须字母顺序 排序。例如,'Chicken, Onions, Sausage'。'Onion, Sausage, Chicken' 不会被通过。

返回结果表,以总花费 降序 排序,配料的组合 升序 排序。

返回格式如下所示。

 

示例 1:

输入: 
Toppings 表:
+--------------+------+
| topping_name | cost |
+--------------+------+
| Pepperoni    | 0.50 |
| Sausage      | 0.70 |
| Chicken      | 0.55 |
| Extra Cheese | 0.40 |
+--------------+------+
输出: 
+--------------------------------+------------+
| pizza                          | total_cost | 
+--------------------------------+------------+
| Chicken,Pepperoni,Sausage      | 1.75       |  
| Chicken,Extra Cheese,Sausage   | 1.65       |
| Extra Cheese,Pepperoni,Sausage | 1.60       |
| Chicken,Extra Cheese,Pepperoni | 1.45       | 
+--------------------------------+------------+
解释: 
这三种配料只有四种不同的组合:
- Chicken, Pepperoni, Sausage:总花费是 $1.75 (Chicken $0.55,Pepperoni $0.50,Sausage $0.70)。
- Chicken, Extra Cheese, Sausage:总花费是 $1.65 (Chicken $0.55,Extra Cheese $0.40,Sausage $0.70)。
- Extra Cheese, Pepperoni, Sausage:总花费是 $1.60 (Extra Cheese $0.40,Pepperoni $0.50,Sausage $0.70)。
- Chicken, Extra Cheese, Pepperoni:总花费是 $1.45 (Chicken $0.55,Extra Cheese $0.40,Pepperoni $0.50)。
输出表根据总花费降序排序。

解法

方法一:窗口函数 + 条件连接

我们先使用窗口函数,按照 topping_name 字段对表进行排序,并为每一行添加一个 rk 字段,表示当前行的排名。

然后我们使用条件连接,连接三次表 T,分别为 t1, t2, t3。连接条件是 t1.rk < t2.rkt2.rk < t3.rk。然后我们计算三个配料的总价,按照总价降序排序,再按照配料名升序排序。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Write your MySQL query statement below
WITH
    T AS (
        SELECT *, RANK() OVER (ORDER BY topping_name) AS rk
        FROM Toppings
    )
SELECT
    CONCAT(t1.topping_name, ',', t2.topping_name, ',', t3.topping_name) AS pizza,
    t1.cost + t2.cost + t3.cost AS total_cost
FROM
    T AS t1
    JOIN T AS t2 ON t1.rk < t2.rk
    JOIN T AS t3 ON t2.rk < t3.rk
ORDER BY 2 DESC, 1 ASC;

评论