可回收和低脂产品| leetcode | MSSQL
#教程 #database #leetcode #mssql

问题

给定的问题涉及“产品”表,构成如下:

列名 类型
product_id int
low_fats 枚举
可回收 枚举

在这里,product_id是主要键。 low_fatsrecyclable是枚举类型,既表示产品是低脂('y'还是n'),以及它是否分别是可回收的('y''还是n')。任务是找到低脂和可回收的产品的ID。

解释

例如,给定“产品”表:

product_id low_fats 可回收
0 y n
1 y y
2 n y
3 y y
4 n n

预期的输出应为:

product_id
1
3

输出列出了低脂产品(即low_fats = 'Y')和可回收的产品的product_id值(即recyclable = 'Y')。

解决方案

我们将查看两个不同的SQL查询,并讨论它们的方法,性能和特征。

源代码1

第一个SQL查询使用直接的WHERE子句过滤既低脂肪又可回收的产品:

SELECT product_id
FROM Products
WHERE low_fats = 'Y'
    AND recyclable = 'Y'

此查询直接利用平等操作员来过滤所需的记录。它的运行时为929ms,超过了Leetcode上其他提交的51.43%。

s1

源代码2

第二个SQL查询不同之处在于它在WHERE子句中使用CASE语句:

SELECT product_id
FROM Products
WHERE 
  CASE 
    WHEN low_fats = 'Y' AND recyclable = 'Y' THEN 1
    ELSE 0
  END = 1

在这种方法中,我们使用CASE语句将条件封装在开关案例结构中。如果产品既低脂肪又可回收,则返回1;否则为0。WHERE子句以1的回报值过滤了记录。其运行时为1316ms,超过了LeetCode提交的13.20%。

s2

结论

这两个解决方案为相同问题提供了两种不同的方法:第一个解决方案在WHERE子句中使用了简单的布尔逻辑,而第二个则在WHERE子句中采用了更复杂的条件(CASE)语句。

虽然第一种方法提供了一种更可读,更快的解决方案,但在处理更复杂的方案时,第二种方法可能会派上用场。但是,值得注意的是,CASE语句引入了其他计算,这可能解释了运行时较慢。

在leetcode性能方面,解决方案排名如下:

  1. 源代码1
  2. 源代码2

尽管如此,现实世界中的RDBMS性能可能会根据索引,数据分布和数据库优化技术等因素而有所不同。

您可以在LeetCode中找到原始问题。

有关更有见地的解决方案和与技术相关的内容,请随时在Beacons page上与我联系。

👉 Check out all the links on my beacons.ai page 👈