MySQL 8.0社区版OLAP查询使用CUBE语法报错求助
解决MySQL 8.0中CUBE查询语法报错的问题
问题原因
MySQL 8.0社区版在8.0.19版本之前不支持GROUP BY CUBE(column_list)这种直接调用的语法,仅支持GROUP BY column_list WITH CUBE的写法;如果你的版本低于8.0.19,就会触发语法错误。
解决方案
方案1:使用WITH CUBE语法(适用于MySQL 8.0.1+)
修改SQL语句为如下形式,即可实现CUBE的分组效果:
SELECT product_name, shipper_name, SUM(quantity) FROM Cart GROUP BY product_name, shipper_name WITH CUBE;
方案2:手动模拟CUBE逻辑(适用于所有MySQL 8.0版本)
CUBE操作本质是生成所有维度组合的分组结果,包含(product_name,shipper_name)、(product_name)、(shipper_name)、()这4种分组场景,用UNION ALL组合这些查询即可:
-- 按双维度分组 SELECT product_name, shipper_name, SUM(quantity) FROM Cart GROUP BY product_name, shipper_name UNION ALL -- 仅按product_name分组 SELECT product_name, NULL AS shipper_name, SUM(quantity) FROM Cart GROUP BY product_name UNION ALL -- 仅按shipper_name分组 SELECT NULL AS product_name, shipper_name, SUM(quantity) FROM Cart GROUP BY shipper_name UNION ALL -- 全局总计 SELECT NULL AS product_name, NULL AS shipper_name, SUM(quantity) FROM Cart;
方案3:升级到MySQL 8.0.19+
如果你的MySQL版本可以升级到8.0.19或更高,就能直接使用你最初的GROUP BY CUBE(product_name,shipper_name)语法。可以执行以下语句查看当前版本:
SELECT VERSION();
内容的提问来源于stack exchange,提问作者heavycomder
相关产品推荐
相关产品推荐

