【问题标题】:SQL Query to Summarize Three Tables [duplicate]汇总三个表的 SQL 查询 [重复]
【发布时间】:2018-11-24 13:20:52
【问题描述】:

假设我有一个具有以下结构的数据库:

Customers  
ID Name  
1  Bob  
2  Jim  
3  Sally  

Products  
ID Description  
10 Pencil  
11 Ruler  
12 Eraser  

Purchases  
ID Customer_ID Product_ID  
1 1 10  
2 1 11    
3 2 10  
4 3 12 

是否有可能(不为每个客户、每个产品做一个查询)编写一个查询以获得如下格式:

Customer Pencil Ruler Eraser  
1 1 1 0  
2 1 0 0  
3 0 0 1  

这是我得到的,但我想避免这种结构,因为它会变得冗长并且产品数量会发生变化。当客户确实购买了产品 10 时,我也会得到重复的行:

  SELECT DISTINCT CUSTOMER.CUSTOMER_ID, (case when a.CUSTOMER_ID = 
    CUSTOMER.CUSTOMER_ID THEN 1 ELSE 0 END) as product10
    from 
    (SELECT PURCHASES.CUSTOMER_ID from PURCHASES
    WHERE PURCHASES.PRODUCT_ID = 10) a, CUSTOMER

CUSTOMER_ID product10  
1 1  
1 0  
2 1  
2 0  
3 0  

谢谢!

【问题讨论】:

    标签: sql pivot


    【解决方案1】:

    你可以做条件聚合:

    select c.id, sum(case when p.Description = 'Pencil' then 1 else 0 end) as Pencil,
                 sum(case when p.Description = 'Ruler' then 1 else 0 end) as Ruler,
                 sum(case when p.Description = 'Eraser' then 1 else 0 end) as Eraser
    from Purchases prc inner join 
         Customers c
         on c.id = prc.Customer_ID inner join
         Products p 
         on p.id = prc.Product_ID  
    group by c.id;
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      SELECT DISTINCT t1.ID, t3.ID 
      FROM Customers t1 
      INNER JOIN Purchases t2 
         ON t1.ID = t2.Customer_ID 
      INNER JOIN Products t3 
         ON t2.Product_ID = t3.ID;
      

      它不会在一行中返回客户拥有的所有内容,但会返回客户与产品之间存在关系且不重复的所有行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-20
        • 1970-01-01
        • 2019-12-04
        • 2010-09-26
        • 1970-01-01
        • 2021-11-16
        相关资源
        最近更新 更多