说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
表:Products
+-------------+---------+ | Column Name | Type | +-------------+---------+ | product_id | int | | store1 | int | | store2 | int | | store3 | int | +-------------+---------+ 在 SQL 中,这张表的主键是 product_id(产品Id)。 每行存储了这一产品在不同商店 store1, store2, store3 的价格。 如果这一产品在商店里没有出售,则值将为 null。
请你重构 Products
表,查询每个产品在不同商店的价格,使得输出的格式变为(product_id, store, price)
。如果这一产品在商店里没有出售,则不输出这一行。
输出结果表中的 顺序不作要求 。
查询输出格式请参考下面示例。
示例 1:
输入: Products table: +------------+--------+--------+--------+ | product_id | store1 | store2 | store3 | +------------+--------+--------+--------+ | 0 | 95 | 100 | 105 | | 1 | 70 | null | 80 | +------------+--------+--------+--------+ 输出: +------------+--------+-------+ | product_id | store | price | +------------+--------+-------+ | 0 | store1 | 95 | | 0 | store2 | 100 | | 0 | store3 | 105 | | 1 | store1 | 70 | | 1 | store3 | 80 | +------------+--------+-------+ 解释: 产品 0 在 store1、store2、store3 的价格分别为 95、100、105。 产品 1 在 store1、store3 的价格分别为 70、80。在 store2 无法买到。
解题思路
目的是从 Products 表中选择每个产品在不同店铺的价格信息。查询会返回一个结果集,包含三列:product_id(产品ID)、store(店铺名称)和 price(对应店铺的价格)。
该查询使用了 UNION 操作符将三个子查询的结果合并在一起。每个子查询选择满足特定条件的记录,并为每个记录添加了 store 列和对应店铺的价格。
子查询1选择 store1 列不为空的记录,并给 store 列赋值为 ‘store1’,price 列赋值为 store1 列的值。
子查询2选择 store2 列不为空的记录,并给 store 列赋值为 ‘store2’,price 列赋值为 store2 列的值。
子查询3选择 store3 列不为空的记录,并给 store 列赋值为 ‘store3’,price 列赋值为 store3 列的值。
AC代码
SELECT product_id, 'store1' AS store, store1 AS price FROM Products WHERE store1 IS NOT NULL UNION SELECT product_id, 'store2' AS store, store2 AS price FROM Products WHERE store2 IS NOT NULL UNION SELECT product_id, 'store3' AS store, store3 AS price FROM Products WHERE store3 IS NOT NULL
公众号
关注公众号『前端也能这么有趣
』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣
』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。