正文
一 题目 620. 有趣的电影
某城市开了一家新的电影院,吸引了很多人过来看电影。该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述。
作为该电影院的信息部主管,您需要编写一个 SQL查询,找出所有影片描述为非 boring (不无聊) 的并且 id 为奇数 的影片,结果请按等级 rating 排列。
例如,下表 cinema:
+---------+-----------+--------------+-----------+ | id | movie | description | rating | +---------+-----------+--------------+-----------+ | 1 | War | great 3D | 8.9 | | 2 | Science | fiction | 8.5 | | 3 | irish | boring | 6.2 | | 4 | Ice song | Fantacy | 8.6 | | 5 | House card| Interesting| 9.1 | +---------+-----------+--------------+-----------+ 对于上面的例子,则正确的输出是为: +---------+-----------+--------------+-----------+ | id | movie | description | rating | +---------+-----------+--------------+-----------+ | 5 | House card| Interesting| 9.1 | | 1 | War | great 3D | 8.9 | +---------+-----------+--------------+-----------+
二 官网题解:
方法:使用 MOD() 函数
我们可以使用 mod(id,2)=1 来确定奇数 id,然后添加 description != ‘boring’ 来解决问题。
MySQL select * from cinema where mod(id, 2) = 1 and description != 'boring' order by rating DESC;
三 改造官网题解:
3.1 题解一
select * from from cinema where id&1 and description<>'boring' order by rating desc
3.2 题解二
SELECT * FROM cinema WHERE description != 'boring' AND id % 2 = 1 ORDER BY rating DESC;
四 MySQL 中判断奇数的 6 种方法:
- mod(x, 2) = 1 ,如果余数是 1 就是奇数。
- power(-1, x) = -1 , 如果结果是 -1 就是奇数
- x % 2 = 1 ,如果余数是 1 就是奇数。
- x & 1 = 1 ,如果是 1 就是奇数(1代表true,0代表false)
- x regexp ‘[1, 3, 5, 7, 9]$’ = 1 如果为 1 就是奇数
- x>>1<<1 != x 如果右移一位在左移一位不等于原值,就是奇数