记录自己做Letcode中SQL题
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。

作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。

例如,下表 cinema:

  1. +---------+-----------+--------------+-----------+
  2. | id | movie | description | rating |
  3. +---------+-----------+--------------+-----------+
  4. | 1 | War | great 3D | 8.9 |
  5. | 2 | Science | fiction | 8.5 |
  6. | 3 | irish | boring | 6.2 |
  7. | 4 | Ice song | Fantacy | 8.6 |
  8. | 5 | House card| Interesting| 9.1 |
  9. +---------+-----------+--------------+-----------+

对于上面的例子,则正确的输出是为:

+---------+-----------+--------------+-----------+
|   id    | movie     |  description |  rating   |
+---------+-----------+--------------+-----------+
|   5     | House card|   Interesting|   9.1     |
|   1     | War       |   great 3D   |   8.9     |
+---------+-----------+--------------+-----------+

解决思路:找出不无聊且id为奇数的影片,rating排序。无非就是WHERE体检判断加上AND语句还有ORDER BY排序语句。

AND语句:

AND运算符是组合两个或多个布尔表达式的逻辑运算符,只有当两个表达式求值为true时才返回true。如果两个表达式中的一个求值为false,则AND运算符返回false

MySQL ORDER BY子句简介

当使用SELECT语句查询表中的数据时,结果集不按任何顺序进行排序。要对结果集进行排序,请使用ORDER BY子句。 ORDER BY子句允许:

  • 对单个列或多个列排序结果集。

  • 按升序或降序对不同列的结果集进行排序。

  • ASC表示升序,DESC表示降序。默认情况下,如果不明确指定ASCDESCORDER BY子句会按照升序对结果集进行排序。

我的SQL:SELECT * FROM cinema WHERE description != 'boring' and id%2 = 1 ORDER BY rating desc

其他实现SQL:

select * from cinema where mod(id, 2) = 1 and description not in ('boring') order by rating desc;