由于计数,db2/sql 查询不允许从连接中选择静态值
Posted
技术标签:
【中文标题】由于计数,db2/sql 查询不允许从连接中选择静态值【英文标题】:db2/sql query won't allow to select static value from join due to counts 【发布时间】:2018-09-26 22:14:35 【问题描述】:我试图弄清楚如何绕过我当前使用的 DB2 查询的问题。
这个查询:
SELECT
count(*) as sales_180,
180/count(*) as velocity
FROM orders
WHERE customerID= :cust_ID
AND itemNum= :item
工作正常并返回我想要的两个值。但是,我正在尝试对另一个表上的 customerID 进行内部联接以获取与其相关的信息。
由于其他值是基于记录数的,它不会让我从其他表中选择静态值。
SELECT
count(*) as sales_180,
180/count(*) as velocity
c.customerCompany
FROM orders o
inner join customers c
on o.customerID = c.customerID
WHERE customerID= :cust_ID
AND itemNum= :item
这告诉我它不会让我选择值 c.customerCompany,因为第一个值是基于计数的。
有没有办法绕过这个来选择 c.customerCompany?我仍然想要计数,但我基本上想说“对于这个客户,得到他们的公司”
【问题讨论】:
能否包含来自 Db2 的确切错误消息?你在velocity
后面少了一个逗号,我想知道你是否需要一个GROUP BY customerID
。
对不起,这是一个错字,但我的查询确实有逗号。错误是:列 c.customerCompany 或 SELECT 列表中的表达式无效。
【参考方案1】:
您的查询中有一些问题。
-
当您使用聚合函数 (
count
,sum
,...) 时,您必须在 group by
中添加非聚合列。
您的customerID
需要使用c.customerID
或o.customerID
否则,这两个表中有两个列名称customerID
,会让DB 引擎感到困惑。
所以你可以试试这个。
SELECT
count(*) as sales_180,
180/count(*) as velocity,
c.customerCompany
FROM orders o
inner join customers c
on o.customerID = c.customerID
WHERE c.customerID= :cust_ID AND itemNum= :item
GROUP BY c.customerCompany
注意
我建议你使用表示为查询指定的列是明确指定的
【讨论】:
以上是关于由于计数,db2/sql 查询不允许从连接中选择静态值的主要内容,如果未能解决你的问题,请参考以下文章
使用 Worklight 6.1.0 触发选择查询时出现 DB2 SQL 错误?
SQL0668N 原因码为 1 ,所以不允许操作 SQLSTATE 57016 ORACLE一次失败的导入到DB2