mysql - 在左连接中获取中间表列的总和
问题描述
下面是表格和 SQL 查询。我正在对 3 个表进行左连接,并尝试获取每个中间表中特定列的总和。但结果是错误的。
产品表:
id | product-name
-----------------
1 | batman
2 | goofy
尺寸颜色表
id | product-id | size | color | total
---------------------------------------
1 | 1 | 33 | blue | 32
2 | 1 | 33 | grey | 11
3 | 2 | 44 | blue | 44
4 | 2 | 33 | grey | 11
销售表
id | size-color-id | sold-qty
-------------------------------
1 | 1 | 11
2 | 1 | 8
3 | 4 | 5
4 | 4 | 2
我想获得每种产品的总金额和销售数量。我试过 :
select p.name, sum(c.total), sum(sold-qty)
from products p
LEFT join size-color c
on p.id = c.product-id
left JOIN sells s
on c.id = s.size-color-id
GROUP by p.id
但我总共得到了错误的结果,因为我们在尺寸颜色表中重复了行。谢谢
解决方案
这有点复杂。您需要sales
在“大小颜色”级别聚合表格。然后再次加入size_color
并聚合:
select p.name, sc.total, sc.qty
from products p left join
(select sc.product_id, sum(sc.total) as total,
sum(s.qty) as qty
from size_color sc left join
(select s.size_color_id, sum(sells) as sells
from sells s
group by s.size_color_id
) s
on s.size_color_id = sc.id
group by sc.product_id
) sc
on sc.product_id = p.id;
在您的查询版本中,总 insize_color
乘以 that 的销售额id
。
推荐阅读
- c# - 通用参数对象处理程序的工厂
- c# - 在 Invoke 中使用 Foreach 循环
- codenameone - 在列表中使用 SpanButton 或 SpanLabel 会破坏向上滚动
- swift - 当列表中的最后一项是 HStack 时,应用程序崩溃
- rest - 当我使用spring boot和restful在application.properties文件中有属性时如何获取Json格式输出
- xml - 使用 Groovy 在 SOAP 响应中替换为“”
- php - 对 Google 的 DCM/DFA API 的未经授权的 HTTP 请求
- javascript - 悬停在 ul li 上时更改 body bgcolor。CSS
- javascript - 无法解决错误:`RangeError: Invalid time zone specified: undefined at new DateTimeFormat (native) at Date.toLocaleString (native)`
- go - 如何使用 *time.Time 在协议缓冲区的结构中声明