如何使用case表达式解决此子查询?

时间:2013-11-04 05:11:14

标签: mysql subquery case case-expression

***规则:---不要使用任何类型的连接,也不要使用相关子查询。 ---不要使用逗号连接。 ---如果你使用联接,那么你将无法获得该任务的积分。 From子句仅引用一个表。 ---不要使用变量。

***这是我的问题:对于书籍表格中包含书籍标题中的鸟类的每本书,显示书籍ID和 标题和关于我们是否有任何订单的消息。不要使用Count()函数。输出将遵循这种格式,并由OrderStatus列排序,书籍首先没有订单;第二个排序键是书籍ID。

这是使用count()函数和相关子查询的解决方案。如何使用这两个问题来解决这个问题?请记住,我也不能使用连接。

SELECT book_id, title 
, CASE (
 SELECT count(*)
 FROM a_bkorders.order_details OD
 WHERE OD.book_id = BK.book_id
   )
 when 0 then 'no orders' 
 when 1 then 'Have orders'        
 when 2 then 'Have orders'   
 when 3 then 'Have orders'        
 else  'Have orders'        
 End as OrderStatus
From a_bkinfo.books BK
WHERE title Like '%Bird%'
ORDER BY OrderStatus, book_id;

2 个答案:

答案 0 :(得分:0)

SELECT BookId,Title,COUNT(BookId),(IF(COUNT(BookId))> 0,“No Order”,“Have Orders”)AS状态来自a_bkinfo.books BK 标题喜欢'%Bird%' GROUP BY BookId 订购by book_id

答案 1 :(得分:0)

尝试此查询:

SELECT book_id, title 
, CASE when (SELECT count(*) FROM a_bkorders.order_details OD WHERE OD.book_id = BK.book_id) = 0
then 'no orders' 
       when (SELECT count(*) FROM a_bkorders.order_details OD WHERE OD.book_id = BK.book_id) = 1 
then 'Have orders'        
       when (SELECT count(*) FROM a_bkorders.order_details OD WHERE OD.book_id = BK.book_id) = 2
then 'Have orders'   
       when (SELECT count(*) FROM a_bkorders.order_details OD WHERE OD.book_id = BK.book_id) = 3 
then 'Have orders'        
else  'Have orders'        
End as OrderStatus
From a_bkinfo.books BK
WHERE title Like '%Bird%'
ORDER BY OrderStatus, book_id;