一道Oracle面试年薪70W的DBA题目

来源:互联网 发布:西海岸新区知乎 编辑:程序博客网 时间:2024/04/29 23:04

最近在网上看到一道Oracle面试年薪70W的DBA题目,其实是一道SQL题目。蛮有意思的。于是拿来分析了下,题目如下:

 

有表order_list数据如下

源数据:(order_list)

 user       food   

Jack     Hamburger

Jack     Hamburger

Tom      Hamburger 
Tom       Sausage

Mark    Hamburger

Mark     Coke

 

 查询之后数据:

user  Hamburger  Sausage   Coke

Jack                   0

Tom                      0

Mark                    1

 

源数据中food种类不确定,请写出您认为最高效的查询语句!

 

初次分析,比较表结构数据和查询结构数据。发现需要使用转置SQL语句,还有需要有统计好的数据,于是需要用到内联视图(统计好的数据做为内联视图)。下面是实现的整个过程。

 

Create Table order_list
(
User_id Varchar2(30),
food Varchar2(50)
)

 

Select * From order_list;

 

Select  user_id,food, Count(*)
From order_list Group By (user_id,food)----作为内联视图

 

Select  user_id, Sum(Decode(Food, 'Hamburger', Sum_Count,0)) "Hamburger",
      Sum(Decode(Food, 'Sausage', Sum_Count,0)) "Sausage",
      Sum(Decode(Food, 'Coke', Sum_Count,0)) "Coke"
  From (Select User_Id, Food, Count(*)Sum_Count
         From Order_List
        Group By (User_Id, Food)) t
 Group By  User_Id

 


 

还有一个种高效的方法,来源网上的SQL(仅供参考)。

 

SELECT USER_id,
SUM(DECODE(FOOD, 'Hamburger', 1, 0)) "Hamburger",
SUM(DECODE(FOOD, 'Sausage', 1, 0)) "Sausage",
SUM(DECODE(FOOD, 'Coke', 1, 0)) "Coke",
From Order_List
group by  User_id;

原创粉丝点击