【问题标题】:How to join 3 tables in SQL如何在 SQL 中连接 3 个表
【发布时间】:2020-10-08 08:40:29
【问题描述】:

我有 3 张桌子:

表 1

id | email
---+----------
1  |  a@a.com
2  |  b@a.com  
3  |  c@a.com 
4  |  d@a.com 

表 2

order_id |   email    
---------+--------------
1        |   a@a.com       
2        |   a@a.com       
3        |   a@a.com       
4        |   c@a.com       
5        |   c@a.com       
6        |   b@a.com       
7        |   b@a.com       

表 3

order_id |   sku    | qty
---------+----------+-----
1        |   sku1   | 1
2        |   sku1   | 2            
3        |   sku1   | 1            
4        |   sku2   | 3           
5        |   sku2   | 2            
6        |   sku2   | 6            
7        |   sku3   | 5           

我想将表 1 连接到表 2 和表 3。

获取表 1 和表 3 sku1 的所有行 + 按 sku1 计算 qty with email + count order of customer has 'sku1'

我想得到这样的结果:

id | email    | sku    | order    | orderqty
---+----------+--------+----------+--------------
1  |  a@a.com |  sku1  | 3        |   4
2  |  b@a.com |  sku1  | 3        |   5 
3  |  c@a.com |  sku1  | 1        |   6
4  |  d@a.com |  sku1  | null     |   null

有人可以帮助我吗?谢谢大家

【问题讨论】:

  • 为什么要 sku1 for id = 4, email = d@a.com?
  • 我需要用 order = 0 和 orderqty = 0 显示这一行

标签: sql count sum left-join


【解决方案1】:

我想你想要left joins 和聚合:

select t1.id, t1.email, 'sku1' sku, count(distinct t2.order_id) cnt_order, sum(t3.qty) orderqty
from table1 t1
left join table2 t2 on t2.email = t1.email
left join table3 t3 on t3.order_id = t2.order_id and t3.sku = 'sku1'
group by t1.id, t1.email

【讨论】:

  • 非常感谢,编码愉快,这对我有用
猜你喜欢
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-28
  • 1970-01-01
相关资源
最近更新 更多