LeetCodeSQL专项计划:1757. 可回收且低脂的产品

65 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情

难度评分

难度评分:⭐

题目

题目详情请点击下述链接,这里就不做介绍。

1757. 可回收且低脂的产品

image.png

Create Table

创建名为products的MySQL数据库表:

该表包含三个列:

  1. product_id:一个整数类型的列,不为空,主键。
  2. low_fats:一个枚举类型的列,可选值为"Y""N",默认值为NULL。
  3. recyclable:一个枚举类型的列,可选值为"Y""N",默认值为NULL。 该表使用InnoDB引擎,字符集为utf8
 CREATE TABLE `products` (
  `product_id` int(50) NOT NULL,
  `low_fats` enum('Y','N') DEFAULT NULL,
  `recyclable` enum('Y','N') DEFAULT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

Insert

插入内容不作额外解释,内容均来自于题目示例的情况。

INSERT INTO `products`(`product_id`, `low_fats`, `recyclable`) VALUES (0, 'Y', 'N');
INSERT INTO `products`(`product_id`, `low_fats`, `recyclable`) VALUES (1, 'Y', 'Y');
INSERT INTO `products`(`product_id`, `low_fats`, `recyclable`) VALUES (2, 'N', 'Y');
INSERT INTO `products`(`product_id`, `low_fats`, `recyclable`) VALUES (3, 'Y', 'Y');
INSERT INTO `products`(`product_id`, `low_fats`, `recyclable`) VALUES (4, 'N', 'N');

SQL

该查询将返回一个列表,该列表是:包含所有同时满足以下条件的产品ID,它必须满足

  1. low_fats列为"Y"
  2. recyclable列为"Y" 所以用AND连接查询条件。
SELECT product_id FROM products WHERE low_fats = 'Y' AND recyclable = 'Y';

备注

这是一道普通的sql查询题,唯一的小点在于WHERE中的连接运算符,要分清OR条件和AND条件。


额外补充:

枚举类型

创建表的时候有一个特殊的类型enum('值','值',...),这个列属性适合一些固定的值。

注意:现今许多数据库,包括 MySQL 和 SQL Server,都支持 ENUM 数据类型。(来自最新官网内容,因为会有帖子说枚举类型是受限,只有在部分数据库中支持)

ENUM值指定为字符串,但是存储时,为了紧凑存储在存储时会自动编码为数字。(这一段总结话引自互联网)。 例如,在上面提供的示例中,'Y'和'N'是可选值。在存储值时,'Y'会被编码为1,'N'会被编码为0。

所以下述SQL一样正确。

SELECT product_id FROM products WHERE low_fats = 1 AND recyclable = 1;