题目:
X city opened a new cinema, many people would like to go to this cinema. The cinema also gives out a poster indicating the movies’ ratings and descriptions.
Please write a SQL query to output movies with an odd numbered ID and a description that is not ‘boring’. Order the result by rating.
For example, table 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 |
+———+———–+————–+———–+
For the example above, the output should be:
+———+———–+————–+———–+
| id | movie | description | rating |
+———+———–+————–+———–+
| 5 | House card| Interesting| 9.1 |
| 1 | War | great 3D | 8.9 |
+———+———–+————–+———–+
Answer:
思路一:利用MOD
函数,获取除以2的余数,为1即是代表id为奇数。
select *
from cinema
where mod(id, 2) = 1 and description != 'boring'
order by rating DESC;
思路二:id&1
代表奇数,id=(id>>1)<<1
代表偶数。
SELECT * FROM cinema WHERE id&1 and description != 'boring' ORDER BY rating DESC;
附上表cinema
的sql:
Create table If Not Exists cinema (id int, movie varchar(255), description varchar(255), rating float(2, 1));
Truncate table cinema;
insert into cinema (id, movie, description, rating) values ('1', 'War', 'great 3D', '8.9');
insert into cinema (id, movie, description, rating) values ('2', 'Science', 'fiction', '8.5');
insert into cinema (id, movie, description, rating) values ('3', 'irish', 'boring', '6.2');
insert into cinema (id, movie, description, rating) values ('4', 'Ice song', 'Fantacy', '8.6');
insert into cinema (id, movie, description, rating) values ('5', 'House card', 'Interesting', '9.1');