GROUP BY GROUPING SETS 无法使用
时间: 2023-12-05 15:06:23 浏览: 37
如果 MySQL 版本比较旧,可能不支持 `GROUP BY GROUPING SETS` 语法。在这种情况下,可以使用 `UNION ALL` 或者 `ROLLUP` 等方式来替代 `GROUP BY GROUPING SETS`。
以下是使用 `UNION ALL` 和 `ROLLUP` 的示例:
1. 使用 `UNION ALL`
```
SELECT 购买渠道, IFNULL(支付年月,'时段合计') 支付年月, IFNULL(子品牌,'子品牌合计') 子品牌, SUM(商品实付金额)
FROM valid_order
WHERE 支付日期 > DATE_SUB('2022-03-31', INTERVAL 2 MONTH) AND 支付日期 <= '2022-03-31'
GROUP BY 购买渠道, 支付年月, 子品牌
UNION ALL
SELECT 购买渠道, IFNULL(支付年月,'时段合计') 支付年月, NULL 子品牌, SUM(商品实付金额)
FROM valid_order
WHERE 支付日期 > DATE_SUB('2022-03-31', INTERVAL 2 MONTH) AND 支付日期 <= '2022-03-31'
GROUP BY 购买渠道, 支付年月
UNION ALL
SELECT 购买渠道, NULL 支付年月, IFNULL(子品牌,'子品牌合计') 子品牌, SUM(商品实付金额)
FROM valid_order
WHERE 支付日期 > DATE_SUB('2022-03-31', INTERVAL 2 MONTH) AND 支付日期 <= '2022-03-31'
GROUP BY 购买渠道, 子品牌
UNION ALL
SELECT 购买渠道, NULL 支付年月, NULL 子品牌, SUM(商品实付金额)
FROM valid_order
WHERE 支付日期 > DATE_SUB('2022-03-31', INTERVAL 2 MONTH) AND 支付日期 <= '2022-03-31'
GROUP BY 购买渠道;
```
2. 使用 `ROLLUP`
```
SELECT 购买渠道, IFNULL(支付年月,'时段合计') 支付年月, IFNULL(子品牌,'子品牌合计') 子品牌, SUM(商品实付金额)
FROM valid_order
WHERE 支付日期 > DATE_SUB('2022-03-31', INTERVAL 2 MONTH) AND 支付日期 <= '2022-03-31'
GROUP BY 购买渠道, 支付年月, 子品牌 WITH ROLLUP;
```
注意:使用 `ROLLUP` 时,查询结果会包含合计行,需要在程序中进行处理或者过滤。