mysql - GROUP BY 子句中不允许使用有序分析函数
问题描述
我有一个查询连接 2 个表,其中包含两个表中字段的 SELECT 语句,以及一个有序分析函数来计算特定客户的总量。当我尝试对字段进行分组时,出现错误“GROUP BY 子句中不允许使用有序分析函数”。我需要 GROUP BY 因为还有其他字段需要分组,但我还需要 SUM() OVER (PARTITION BY()) 进行其他计算。如何创建子查询以消除错误?
查询是这样的:
a.cust_no,
b.cust_name,
a.location,
c.product,
SUM(a.volume),
SUM(a.weight),
SUM(volume) OVER (PARTITION BY cust_no ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS fixed_volume,
SUM(CASE WHEN a_flag = 'Y' THEN volume ELSE 0 END) OVER (PARTITION BY cust_no ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS bias_volume
FROM test_table a
JOIN test_table2 b ON a.cust_no = b.cust_no
JOIN test_table3 c ON a.cust_no = c.cust_no
GROUP BY 1,2,3,4
解决方案
您的 GROUP BY 子句中没有 OLAP 函数。
我希望3504 Selected non-aggregate values must be part of the associated group,这应该解决它:
select
a.cust_no,
b.cust_name,
a.location,
c.product,
SUM(a.volume),
SUM(a.weight),
--volume is a detail row -> doesn't exist after aggregation
--SUM(a.volume) OVER (PARTITION BY cust_no) AS fixed_volume,
--aggregated volume can be used
SUM(SUM(a.volume)) OVER (PARTITION BY cust_no) AS fixed_volume,
--same logic
SUM(SUM(CASE WHEN a_flag = 'Y' THEN a.volume ELSE 0 END)) OVER (PARTITION BY cust_no ) AS bias_volume
FROM test_table a
JOIN test_table2 b ON a.cust_no = b.cust_no
JOIN test_table3 c ON a.cust_no = c.cust_no
GROUP BY 1,2,3,4
推荐阅读
- f# - 如何从相同类型的序列中找到特定的可区分联合,然后返回该特定的可区分联合(如果存在)
- amazon-web-services - 如何使用 CloudFormation 模板将 BucketPolicy (LifecycleConfiguration) 应用于现有存储桶?
- puppeteer - 如何使用 puppeteer 获取所有具有样式的字体
- python - 如何批处理我的 R 机器学习模型?
- mysql - 当索引名称为“index”时如何在mysql中删除索引
- android - 如何在android应用程序中实现人脸识别以登录目的?
- powershell - 使用 powershell 创建符号链接
- node.js - 从 Oreilly 书籍代码安装 @types/d3 的 NPM 问题
- ios - 条件绑定的初始化程序必须具有可选类型,而不是“经销商”
- python - OSX 上的“jupyter”命令来自哪里