我不确定是否可以只使用一个查询,但这是我的问题:
SELECT
SUM(p.amount) AS sales,
AVG(p.amount) AS avg,
COUNT(p.product_id) AS total,
pd.title
FROM
payments AS p
LEFT JOIN products AS pd
ON pd.id = p.product_id
WHERE p.status = 1
GROUP BY MONTH(p.created);
返回的结果是:
Array
(
[0] => stdClass Object
(
[sales] => 979.90
[avg] => 97.990000
[total] => 10
[title] => Product 1
)
[1] => stdClass Object
(
[sales] => 1139.84
[avg] => 71.240000
[total] => 16
[title] => Product 1
)
[2] => stdClass Object
(
[sales] => 789.89
[avg] => 71.808182
[total] => 11
[title] => Product 1
)
[3] => stdClass Object
(
[sales] => 739.87
[avg] => 56.913077
[total] => 13
[title] => Product 1
)
[4] => stdClass Object
(
[sales] => 569.85
[avg] => 37.990000
[total] => 15
[title] => Product 1
)
[5] => stdClass Object
(
[sales] => 999.78
[avg] => 45.444545
[total] => 22
[title] => Product 1
)
[6] => stdClass Object
(
[sales] => 569.91
[avg] => 63.323333
[total] => 9
[title] => Product 1
)
[7] => stdClass Object
(
[sales] => 199.96
[avg] => 49.990000
[total] => 4
[title] => Product 1
)
)
由于所有内容都按月分组,因此产品的所有名称都相同。
这有什么办法吗?我需要这个来呈现jQuery Flot chart,所以它需要按月分组。但我想将产品标题用作图表标签。
答案 0 :(得分:1)
如果您想按月分组,但有一列列出所有产品标题,您可以像这样使用GROUP_CONCAT
SELECT
MONTH(p.created) AS month,
GROUP_CONCAT(DISTINCT(pd.title) SEPARATOR ', ') AS products,
SUM(p.amount) AS sales,
AVG(p.amount) AS avg,
COUNT(p.product_id) AS total
FROM
payments AS p
LEFT JOIN products AS pd
ON pd.id = p.product_id
WHERE p.status = 1
GROUP BY MONTH(p.created);
这会给你一个像这样的结果
| month | products | sales | avg | total |
|-------|---------------------------------|-------|--------|-------|
| 3 | product 2, product 3, product 1 | 10 | 2.5 | 4 |
| 4 | product 4, product 1 | 7 | 2.3333 | 3 |
| 5 | product 2, product 4, product 1 | 10 | 2.5 | 4 |
| 6 | product 2, product 3 | 6 | 2 | 3 |