【发布时间】:2016-07-01 22:49:24
【问题描述】:
我意识到这里有很多 MySQL 帖子,每个帖子都特定于海报使用。我有一个相当复杂的加入情况。
我有 3 个表,并试图在两列上聚合数据。我对 ProductID 和 ProductionMonth 进行分组。
我快到了,但现在我的数据集的日期列分组有一个症结所在。
我的数据输出当前没有填充特定月份没有的数据。我需要它至少显示零和日期。
现在的输出是这样的:
<pre>
Products TOTAL CANCELLED Product Name ProductType ProductionMonth
2 32 5 Advantage VSC Auto 2016-02-02
2 26 3 Advantage VSC Auto 2016-01-01
2 31 2 Advantage VSC Auto 2015-12-01
16 5 1 ASC VSC Auto 2016-02-01
16 4 4 ASC VSC Auto 2016-01-01
17 0 0 MenuVantage Menu Software NULL
21 12 0 CSO Credit 2016-02-01
21 24 0 CSO Credit 2016-01-01
</pre>
但即使没有与该记录关联的日期,我也需要数据包含日期。这是我当前的代码:
<pre>
SELECT P.Products, Inv.TOTAL,Inv.CANCELLED, Pur.ProductName AS 'Product Name',ProductType,ProductionMonth
FROM Dealership_Products P
LEFT JOIN (SELECT ProductsID, SUM(Total) AS TOTAL, SUM(Cancelled) AS CANCELLED,ProductionMonth
FROM Monthly_Production_Numbers
WHERE DealershipID = '25'
AND
ProductionMonth > DATE_SUB(CURDATE(), INTERVAL 1 MONTH) - INTERVAL 3 MONTH
GROUP BY ProductionMonth,ProductsID) AS Inv
ON P.Products = Inv.ProductsID
LEFT JOIN (SELECT ProductsID, ProductName AS ProductName, ProductType
FROM Products
GROUP BY ProductsID) AS Pur
ON P.Products = Pur.ProductsID
WHERE DealershipID = '25'
AND
Inactive = 'FALSE'
ORDER BY Products ASC, ProductionMonth DESC
</pre>
正在使用的表:
Dealership_Products
column (Products) ->
Products.ProductsID
Monthly_Production_Numbers 按(ProductionMonth)“过去 3 个月”分组 按 (ProductsID) 分组
产品
由于数据和表格非常复杂,我无法共享所有结构。但主要部分在这里。
感谢您的帮助!
【问题讨论】:
-
一般来说,数据显示问题最好在表示层(例如 PHP 循环)中处理(如果可用)。
-
它是可用的,但我知道也可以通过一些巧妙的 MySQL 行来获得完整的色域。如果走 MySQL 路线会更有效率。谢谢。
-
没有。本身并没有提高效率。
-
没错,我的意思是提供所需结果所需的代码行。也许以更优雅的方式。 ;)
-
我们对优雅有不同的定义:-)
标签: mysql group-by inner-join